【问题标题】:Why My Min and Max date setting not working in my date picker?为什么我的最小和最大日期设置在我的日期选择器中不起作用?
【发布时间】:2019-09-23 18:01:22
【问题描述】:

我之前问过一个问题,即设置一个日期选择器日期与另一个日期选择器的月/年变化有关。我没有得到确切的答案,但不知何故,我设法通过引用各种堆栈溢出答案来将最小和最大日期设置为日期选择器。但是最小和最大日期设置无法正常工作。

月份和年份选择日期选择器:

 <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>

脚本:

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,
});
}

我调试并发现当我选择月份时,定义了最小和最大日期。 例如:如果我选择,Feb 2018 表示,

min date comes as :01/02/2018

max date comes as : 28/02/2018,

但更改不会在我的日期选择日期选择器中复制

调试图片图片

显示最小日期的调试图像图片

这里是my fiddle

如何解决这个问题?

【问题讨论】:

  • 我在documentation 中看不到 minDate 和 maxDate 属性。你确定它们是有效的吗?
  • 小心: 有两个几乎完全相同的 jQuery 插件,它们的名称都是 Datepicker。一个是 Bootstrap Datepicker,另一个是 jQueryUI Datepicker。他们有细微的差异,可能会导致您的问题在这里。例如,jQueryUI datepicker 使用 minDate,但 Bootstrap Datepicker 使用 startDate。如果您实际上使用的是 Bootstrap 日期选择器(如您所标记的),那么您的属性不正确。
  • @TylerRoper 请检查我的问题,我编辑并添加了调试图片的图像,显​​示最小/最大日期,在此我选择 2019 年 3 月,所以它显示 3 月日期。
  • @Riya 你在使用 bootstrap-datepicker 还是 jqueryUI datepicker?
  • minDate 变量的值是否正确并不能告诉我们太多信息;正如雷达下方询问的那样,我们需要知道您真正使用的是哪个日期选择器,因为它们使用不同的属性名称。更好的是,您的问题应该包含minimal, reproducible example,否则为off-topic (#1)

标签: javascript date datepicker bootstrap-datepicker


【解决方案1】:

您没有使用正确的选项:

  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,
      });
    }

minDate 更改为startDate,将maxDate 更改为endDate

bootstrap-datepicker documentation

【讨论】:

  • 我现在尝试开始日期结束日期,这也不起作用,我的'txtfrom' datepicker 只显示所有月份日期,默认为当前日期
【解决方案2】:

您当前正在尝试重新创建现有的日期选择器。而是使用setStartDatesetEndDate 方法修改当前实例。

$("#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>

或者,您可以remove 当前的日期选择器并从头开始重新初始化它。请注意,Bootstrap Datepicker 使用 startDateendDate 作为选项,而不是 minDatemaxDate

$("#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>

【讨论】:

  • 我试过你的一个先生,但对我不起作用先生.. Amit Kumar 先生的回答对我有用先生.. 非常感谢您的回复和帮助先生..
【解决方案3】:

请试试这个代码

HTML 代码:

<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 代码:

<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>

代码输出:

【讨论】:

  • 哇..你的作品太棒了..这解决了我被击中超过 2 周的问题..非常感谢...
  • 你能解释一下minDate.toLocaleDateString('en-GB');这条线吗,请解释一下en-GB代表什么?
  • @Riya 我在这里使用toLocaleDateString('en-GB'),如果您要更改日期格式,那么您还需要更改它。因为您使用的是dd/mm/yyyy,所以这种格式适合这种情况。
  • @Riya minDate.toLocaleDateString('en-GB') 这会将您的日期转换为dd/mm/yyyy 如果您将使用minDate.toLocaleDateString('en-US'),那么它将给出mm/dd/yyyy
  • 在默认选择月份和是后,有没有办法在from 文本框中显示01/01/2021 的最小日期? ,因为默认日期对我不起作用...
猜你喜欢
  • 2017-04-05
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多