简体   繁体   中英

Why My Min and Max date setting not working in my date picker?

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?

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

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>

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:

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM