Reputation: 157
I previously asked question to set one date picker dates with respect to month/year change of another date picker. I didn't get exact answer, but somehow I managed to get min and max dates to set to a date picker by referring various stack overflow answers. But that min and max date settings are not working properly.
Month and year picking date picker:
<label> Month</label>
<div class="input-group date">
<input type="text" class="form-control pull-right" id="txtMonth" onchange="MonthDatePick();">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
</div>
My selected month date picking datepicker:
<div class="col-lg-3">
<label> From</label>
<div class="input-group date">
<input type="text" class="form-control pull-right" id="txtFrom">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
</div>
</div>
Script:
function MonthDatePick() {
var month = $('#txtMonth').datepicker('getDate').getMonth() + 1;//('getMonth');
var year = $('#txtMonth').datepicker('getDate').getFullYear();//('getFullYear');
var minDate = new Date(year, month-1, 1);
var maxDate = new Date(year,month, 0);
$("#txtFrom").datepicker({
autoclose: true,
minDate: minDate,
maxDate: maxDate,
format: 'dd/mm/yyyy',
//defaultDate:minDate,
changeMonth: false,
changeYear: false,
});
}
I debugged and found out that when I select month, min and max dates were defined.
For Ex: If I choose, Feb 2018
means,
min date comes as :01/02/2018
max date comes as : 28/02/2018,
but the change does not replicate in my date selecting date picker
Debugging image picture
Debugging image picture showing min date
Here is my fiddle
How to fix this?
Upvotes: 0
Views: 5383
Reputation: 1240
Please try this code
HTML Code :
<label> Month</label>
<div class="input-group date">
<input type="text" class="form-control pull-right" id="txtMonth" onchange="MonthDatePick();">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
</div>
<div class="col-lg-3">
<label> From</label>
<div class="input-group date">
<input type="text" class="form-control pull-right" id="txtFrom">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
</div>
</div>
JS Code :
<script type="text/javascript">
$("#txtMonth").datepicker({
autoclose: true,
startView: "months",
minViewMode: "months",
format: 'M-yyyy',
//defaultDate:minDate,
changeMonth: false,
changeYear: false,
});
function MonthDatePick() {
var month = $('#txtMonth').datepicker('getDate').getMonth() + 1;//('getMonth');
var year =
$('#txtMonth').datepicker('getDate').getFullYear();//('getFullYear');
var minDate = new Date(year, month-1, 1);
minDate = minDate.toLocaleDateString('en-GB');
var maxDate = new Date(year,month, 0);
maxDate = maxDate.toLocaleDateString('en-GB');
$("#txtFrom").datepicker('destroy').datepicker({
autoclose: true,
startDate: minDate,
endDate: maxDate,
format: 'dd/mm/yyyy',
//defaultDate:minDate,
changeMonth: false,
changeYear: false,
});
$('#txtFrom').datepicker('setDate',minDate);
}
</script>
Output of the code :
Upvotes: 0
Reputation: 21672
You're currently attempting to recreate an existing datepicker. Instead, modify the current instance using the setStartDate
and setEndDate
methods.
$("#txtClaimFrom").datepicker("setStartDate", minDate);
$("#txtClaimFrom").datepicker("setEndDate", maxDate);
$(document).ready(function() {
$('#txtClaimMonth').datepicker({
autoclose: true,
format: "MM yyyy",
viewMode: "months",
minViewMode: "months",
});
$('#txtClaimFrom').datepicker({
autoclose: true,
format: 'dd/mm/yyyy'
})
});
function MonthDatePick() {
var month = $('#txtClaimMonth').datepicker('getDate').getMonth() + 1; //('getMonth');
var year = $('#txtClaimMonth').datepicker('getDate').getFullYear(); //('getFullYear');
var minDate = new Date(year, month - 1, 1);
var maxDate = new Date(year, month, 0);
$("#txtClaimFrom").datepicker("setStartDate", minDate);
$("#txtClaimFrom").datepicker("setEndDate", maxDate);
}
.col-lg-3 { margin-bottom: 180px; }
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.4.0/css/bootstrap-datepicker.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.4.0/js/bootstrap-datepicker.min.js"></script>
<div class="col-lg-3">
<label>Claim Month</label>
<div class="input-group date">
<input type="text" class="form-control pull-right" id="txtClaimMonth" onchange="MonthDatePick();">
<div class="input-group-addon bg-purple">
<i class="fa fa-calendar"></i>
</div>
</div>
</div>
<div class="col-lg-3">
<label>Claim From</label>
<div class="input-group date">
<input type="text" class="form-control pull-right" id="txtClaimFrom">
<div class="input-group-addon bg-purple">
<i class="fa fa-calendar"></i>
</div>
</div>
</div>
Alternatively, you could remove
the current datepicker and re-initialize it from scratch. Note that Bootstrap Datepicker uses startDate
and endDate
as options, not minDate
and maxDate
.
$("#txtClaimFrom").datepicker("remove");
$("#txtClaimFrom").datepicker({
autoclose: true,
startDate: minDate,
endDate: maxDate,
format: 'dd/mm/yyyy',
changeMonth: false,
changeYear: false,
});
$(document).ready(function() {
$('#txtClaimMonth').datepicker({
autoclose: true,
format: "MM yyyy",
viewMode: "months",
minViewMode: "months",
});
$('#txtClaimFrom').datepicker({
autoclose: true,
format: 'dd/mm/yyyy'
})
});
function MonthDatePick() {
var month = $('#txtClaimMonth').datepicker('getDate').getMonth() + 1; //('getMonth');
var year = $('#txtClaimMonth').datepicker('getDate').getFullYear(); //('getFullYear');
var minDate = new Date(year, month - 1, 1);
var maxDate = new Date(year, month, 0);
$("#txtClaimFrom").datepicker("remove");
$("#txtClaimFrom").datepicker({
autoclose: true,
startDate: minDate,
endDate: maxDate,
format: 'dd/mm/yyyy',
changeMonth: false,
changeYear: false,
});
}
.col-lg-3 {
margin-bottom: 180px;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.4.0/css/bootstrap-datepicker.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.4.0/js/bootstrap-datepicker.min.js"></script>
<div class="col-lg-3">
<label>Claim Month</label>
<div class="input-group date">
<input type="text" class="form-control pull-right" id="txtClaimMonth" onchange="MonthDatePick();">
<div class="input-group-addon bg-purple">
<i class="fa fa-calendar"></i>
</div>
</div>
</div>
<div class="col-lg-3">
<label>Claim From</label>
<div class="input-group date">
<input type="text" class="form-control pull-right" id="txtClaimFrom">
<div class="input-group-addon bg-purple">
<i class="fa fa-calendar"></i>
</div>
</div>
</div>
Upvotes: 1
Reputation: 7635
You are not using the correct options:
function MonthDatePick() {
var month = $('#txtMonth').datepicker('getDate').getMonth() + 1;//('getMonth');
var year = $('#txtMonth').datepicker('getDate').getFullYear();//('getFullYear');
var minDate = new Date(year, month-1, 1);
var maxDate = new Date(year,month, 0);
$("#txtFrom").datepicker({
autoclose: true,
startDate: minDate,
endDate: maxDate,
format: 'dd/mm/yyyy',
//defaultDate:minDate,
changeMonth: false,
changeYear: false,
});
}
Change minDate
with startDate
and maxDate
with endDate
See bootstrap-datepicker documentation
Upvotes: 1