我遇到需求是要求我将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【转载】,谢谢!