【问题标题】:date picker start date & end date query日期选择器开始日期和结束日期查询
【发布时间】:2018-05-04 06:08:29
【问题描述】:

我有 2 个日期选择器(意味着应用 2 次),如果我从第一个日期选择器(即开始日期)中选择特定日期,那么第二个日期选择器将禁用所有小于开始日期的日期。

//Date picker
$('.datepicker').datepicker({

  format: "yyyy/mm/dd",

});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="col-sm-12">

  <div class="col-sm-6 pull-left">
    From: <input type="text" name="reg_start_date" class="datepicker" size="15" />
  </div>
  <div class="col-sm-6 pull-left">
    To: <input type="text" name="reg_end_date" class="datepicker" size="15" />
  </div>
</div>

更新:

   <script>
<?= $this->Html->script(array('https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js','https://code.jquery.com/ui/1.11.4/jquery-ui.min.js','bootstrap/js/bootstrap.min.js','https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js','plugins/select2/select2.full.min.js','plugins/input-mask/jquery.inputmask.js','plugins/input-mask/jquery.inputmask.date.extensions.js','plugins/input-mask/jquery.inputmask.extensions.js','plugins/daterangepicker/moment.js','https://code.jquery.com/ui/1.11.4/jquery-ui.min.js', 'plugins/sparkline/jquery.sparkline.min.js', 'plugins/jvectormap/jquery-jvectormap-1.2.2.min.js', 'plugins/jvectormap/jquery-jvectormap-world-mill-en.js','plugins/knob/jquery.knob.js','plugins/daterangepicker/daterangepicker.js','plugins/datepicker/bootstrap-datepicker.js','plugins/slimScroll/jquery.slimscroll.min.js', 'plugins/fastclick/fastclick.min.js','dist/js/app.min.js','dist/js/demo.js','plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.js')); ?>


      $(function () {
       $('.second').datepicker({
            format: "yy/mm/dd" 
        });

        $('.first').datepicker({
          format: "yy/mm/dd",
          onSelect: function(date) {
            alert('124');
            var date1 = $('.first').datepicker('getDate');
            var date = new Date(Date.parse(date1));
            date.setDate(date.getDate() + 1);
            var newDate = date.toDateString();
            newDate = new Date(Date.parse(newDate));
            $('.second').datepicker("option", "minDate", newDate);
          }
        });

      });

    </script>

【问题讨论】:

    标签: jquery datepicker jquery-ui-datepicker


    【解决方案1】:

    您可以在第一个和第二个文本框中添加额外的类,并在使用onSelect 选择第一个文本框时将minDate 分配给第二个文本框。

    $('.second').datepicker({
        dateFormat: "yy/mm/dd" 
    });
    
    $(".first").datepicker({
      dateFormat: "yy/mm/dd",
      onSelect: function(date) {
        var date1 = $('.first').datepicker('getDate');
        var date = new Date(Date.parse(date1));
        date.setDate(date.getDate() + 1);
        var newDate = date.toDateString();
        newDate = new Date(Date.parse(newDate));
        $('.second').datepicker("option", "minDate", newDate);
      }
    });
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <div class="col-sm-12">
    
      <div class="col-sm-6 pull-left">
        From: <input type="text" name="reg_start_date" class="datepicker first" size="15" />
      </div>
      <div class="col-sm-6 pull-left">
        To: <input type="text" name="reg_end_date" class="datepicker second" size="15" />
      </div>
    </div>

    【讨论】:

    • 运行 sn -p 你可以看到它正在工作。代码没有问题。可能是其他 js 代码给出了一些错误。控制台中的任何错误?
    • 插件太多,bootstrap 和 jquery ui 之间似乎有冲突。尝试搜索noConflict() 以及如何实现它们。还有一点要检查删除 jquery 和 jquery ui 旁边的所有插件,否则检查一切看起来都很好。
    【解决方案2】:

    你必须在 reg_start_date 创建一个监听器。如果内容发生变化,日期选择器为
    reg_end_date 必须设置为

    $("#reg_end_date").datepicker({ minDate: new Date(/*date from reg_start_date*/) });
    

    【讨论】:

      【解决方案3】:

      您必须向第一个日期选择器(开始)添加一个侦听器,每次更改都会更新第二个(结束)的 minDate

      类似这样的:

      var $start = $('[name="reg_start_date"]');
      var $end = $('[name="reg_end_date"]');
      
      $('.datepicker').datepicker({
        format: 'yyyy/mm/dd'
      });
      
      $start.datepicker('option', 'onClose', function(date) {
        $end.datepicker('option', 'minDate', date);
      });
      <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
      <div class="col-sm-12">
      
        <div class="col-sm-6 pull-left">
          From: <input type="text" name="reg_start_date" class="datepicker" size="15" />
        </div>
        <div class="col-sm-6 pull-left">
          To: <input type="text" name="reg_end_date" class="datepicker" size="15" />
        </div>
      </div>

      【讨论】: