基于bootstrap的双日历插件 daterangepicker

时间:2022-09-26 11:14:13

我遇到需求是要求我将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
     }
 })
}

运行结果如下:

基于bootstrap的双日历插件 daterangepicker

基于bootstrap的双日历插件 daterangepicker

基于bootstrap的双日历插件 daterangepicker

 

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

$('#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【转载】,谢谢!