wangxiaoling

我遇到需求是要求我将daterangepicker的一个双日期选择格式修改成两个单日期格式的日期选择框(方便手机端显示),要求如下:

1.两个单日期格式分别为开始日期和结束日期

2.开始日期可选择范围在今天及今天之后

3.结束日期在开始日期之后,根据开始日期变化

4.需要在选择好开始日期之后自动调起结束日期选择框进行选择。

下面贴代码:

引入相关的css:

<link href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.bootcss.com/bootstrap-daterangepicker/2.1.27/daterangepicker.min.css" rel="stylesheet">

引入相关js:

<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap-daterangepicker/2.1.27/moment.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap-daterangepicker/2.1.27/daterangepicker.min.js"></script>

 

html:

<div class="col-sm-2 mb-2">
      <input type="text" name="daterange1" id="startdate"  class="form-control ks-daterange text-center" placeholder="入住时间">
</div>
<div class="col-sm-2 mb-2">
     <input type="text" name="daterange2" id="enddate"  class="form-control ks-daterange text-center" placeholder="退房时间">
</div>

js:

var day_length = 1; //初始化今天距离结束日期的长度
$(\'#startdate\').daterangepicker({
   singleDatePicker: true,
   format : \'YYYY-MM-DD\', //控件中from和to 显示的日期格式
   separator : \'to\',
   // startDate:moment().startOf(\'day\'),
   // endDate: moment().add(1, "days"),
   minDate:moment(),
   locale : {
      format: "YYYY/MM/DD",
      applyLabel : "确定",
      cancelLabel : "取消",
      fromLabel : "起始时间",
      // toLabel : "结束时间",
      customRangeLabel : "自定义",
      daysOfWeek : [ \'日\', \'一\', \'二\', \'三\', \'四\', \'五\', \'六\' ],
      monthNames : [ \'一月\', \'二月\', \'三月\', \'四月\', \'五月\', \'六月\',
                    \'七月\', \'八月\', \'九月\', \'十月\', \'十一月\', \'十二月\' ],
      firstDay : 1
      },

 }).on(\'hide.daterangepicker\', function() {
   //计算长度
     var s1 = $(\'#startdate\').val();
     s1 = new Date(s1.replace(/-/g, "/"));
     var s2 = new Date();
     var days = s1.getTime() - s2.getTime();
     var time = parseInt(days / (1000 * 60 * 60 * 24));
     if(s1.getTime() - s2.getTime() < 0){
          day_length = time + parseInt(1)
     } else {
          day_length = time + parseInt(2)
     }
     useLast() //初始化结束日期选择框,更新day_length
     $(\'#enddate\').focus() //调起日期选择弹框
})

useLast() //初始化结束日期选择框,避免先选择结束日期的情况

//结束日期必须要封装成方法,不然无法更新day_length
function useLast(){
   $(\'#enddate\').daterangepicker({
   singleDatePicker: true,
   format : \'YYYY-MM-DD\', //控件中from和to 显示的日期格式
   separator : \'to\',
   // startDate:moment().startOf(1,\'day\'),
   // endDate: moment().add(1, "days"),
   minDate:moment().add(day_length, "days"),
   locale : {
     format: "YYYY/MM/DD",
     applyLabel : "确定",
     cancelLabel : "取消",
     // fromLabel : "起始时间",
     toLabel : "结束时间",
     customRangeLabel : "自定义",
     daysOfWeek : [ \'日\', \'一\', \'二\', \'三\', \'四\', \'五\', \'六\' ],
     monthNames : [ \'一月\', \'二月\', \'三月\', \'四月\', \'五月\', \'六月\',
                 \'七月\', \'八月\', \'九月\', \'十月\', \'十一月\', \'十二月\' ],
     firstDay : 1
     }
 })
}

运行结果如下:

 

最后,介绍下这个时间插件的几个事件:

$(\'#reportrange\').on(\'show.daterangepicker\', function() {  
 //  console.log("show event fired");  
});  
$(\'#reportrange\').on(\'hide.daterangepicker\', function() {  
  // console.log("hide event fired");  
});  

$(\'#reportrange\').on(\'cancel.daterangepicker\', function(ev, picker) {  
 //  console.log("cancel event fired");  
});  

我在上面的例子中,由于要动态改变day_length的值,就用到了hide.daterangepicker

 此demo下载地址:https://files.cnblogs.com/files/wangxiaoling/demo_daterangepicker.rar

 官方示例地址:http://www.daterangepicker.com/

转载时请注明出处及相应链接,本文永久地址:https://www.cnblogs.com/wangxiaoling/p/8696223.html,文章标题备注转载,如:xxx【转载】,谢谢!

分类:

技术点:

相关文章: