应用背景:本文引例是需要使用双日历插件,但是layui提供的双日历插件选择日期最多只能选择两个月,无法满足功能。故此选择Daterangepicker
需要应用的js和CSS文件如下(具体的地址根据实际文件存放的地址):
<script type="text/javascript" th:src="@{/plugins/jquery/jquery-1.10.2.min.js}"></script>
<link th:href="@{/plugins/bootstarp/bootstrap.min.css}" rel="stylesheet">
<link rel="stylesheet" type="text/css" media="all" th:href="@{/plugins/bootstarp/daterangepicker-bs3.css}" />
<link rel="stylesheet" type="text/css" media="all" th:href="@{/plugins/bootstarp/daterangepicker-1.3.7.css}" />
<link th:href="@{/plugins/bootstarp/font-awesome-4.1.0/css/font-awesome.min.css}" rel="stylesheet">
<script type="text/javascript" th:src="@{/plugins/bootstarp/bootstrap.min.js}"></script>
<script type="text/javascript" th:src="@{/plugins/bootstarp/moment.js}" ></script>
<script type="text/javascript" th:src="@{/plugins/bootstarp/daterangepicker-1.3.7.js}"></script>
需要修改部门CSS样式
.layui-input {
height: 32px!important;
}
.box {
display: block;
text-align: center;
margin: 20px auto;
}
label {
display: inline-block;
width: 90px;
line-height: 40px;
height: 40px;
margin: 0;
font-weight: normal;
font-family: "宋体";
background-color: #ddd;
}
.divDateSelect{
width: 185px;
height: 50px;
line-height: 50px;
margin:10px auto;
border:2px solid #ddd;
border-radius: 5px;
}
时间选择框:
<div class="layui-inline" >
<input type="text" name="datePicker" class="layui-input input-placeholder datePicker" id="datePicker" placeholder="请选择时间段" >
</div>
js代码:
function getRDate() {
$('input[name="datePicker"]').daterangepicker({
startDate: moment().startOf('month'),
endDate: moment(),
//minDate: '01/01/2012', //最小时间
maxDate : moment(), //最大时间
// dateLimit : {
// days : 30
// }, //起止时间的最大间隔
showDropdowns : true,
showWeekNumbers : false, //是否显示第几周
// timePicker : true, //是否显示小时和分钟
autoApply:true,//不用点击Apply或者应用按钮就可以直接取得选中的日期
timePickerIncrement : 60, //时间的增量,单位为分钟
timePicker12Hour : false, //是否使用12小时制来显示时间
// ranges : {
// '今日': [moment().startOf('day'), moment()],
// '昨日': [moment().subtract('days', 1).startOf('day'), moment().subtract('days', 1).endOf('day')],
// '最近7日': [moment().subtract('days', 6), moment()],
// '最近30日': [moment().subtract('days', 29), moment()]
// },
opens : 'left', //日期选择框的弹出位置
buttonClasses : [ 'btn btn-default' ],
applyClass : 'btn-small btn-primary blue',
cancelClass : 'btn-small',
format : 'YYYY-MM-DD', //控件中from和to 显示的日期格式
separator : '-',
locale : {
applyLabel : '确定',
cancelLabel : '取消',
// fromLabel : '起始时间',
// toLabel : '结束时间',
// customRangeLabel : '自定义',
daysOfWeek : [ '日', '一', '二', '三', '四', '五', '六' ],
monthNames : [ '一月', '二月', '三月', '四月', '五月', '六月',
'七月', '八月', '九月', '十月', '十一月', '十二月' ],
firstDay : 1
},
}, function(start, end, label) {
// timeRangeChange = [start.format('YYYY-MM-DD'), end.format('YYYY-MM-DD')];
startTime = start.format('YYYY-MM-DD');
endTime = end.format('YYYY-MM-DD');
});
}
配置选项startDate: (Date 对象, moment 对象或者string类型)初始化日期范围选中的开始时间。
endDate: (Date 对象, moment 对象或者string类型)初始化日期范围选中的结束时间。
minDate: (Date 对象, moment 对象或者string类型) 用户可以选择的最早时间。
maxDate: (Date 对象, moment 对象或者string类型) 用户可以选择的最晚时间。
dateLimit: (object类型) 选中的开始和结束日期之间最大时间间隔。可以是能够添加到moment对象(moment.add())中的任何属性(如:days, months)。
showDropdowns: (boolean类型) 在日历上面显示年和月的下拉框,选中后将跳到指定的年和月 showWeekNumbers: (boolean类型) 在日历上每周开始的地方显示本地化的周编号。
showISOWeekNumbers: (boolean类型) 在日历上每周开始的地方显示国际标准的周编号。 timePicker: (boolean类型) 允许选择日期和时间,而不是局限于日期。
timePickerIncrement: (number类型) 时间选择框中分钟列的增加步长(如:设置为30后只允许选择以0和30结束的时间)。 timePicker24Hour: (boolean类型) 使用24小时制来代替12小时制,同时删除AM/PM选择框。
timePickerSeconds: (boolean类型) 在时间选择框中显示秒选择列。
ranges: (object类型) 设置用户可以选择的预定义日期范围。每个键名即范围的标签名,对应值是两个日期组成的数组,来表示范围的界限。
showCustomRangeLabel: (boolean类型) 当使用范围选项时,在预定义范围列表的末尾显示标记为"Custom Range"的标签。当选择的日期范围与任何一个预定义的范围都不匹配时,该选项将被高亮显示。单击它显示日历可以选择新的范围。 alwaysShowCalendars: (boolean类型) 通常,如果使用范围选项指定了预定义日期范围,则用户除了单击 "Custom Range"之外,日期选择器都不会显示用于选择自定义日期范围的日历。当选项设置为true时,将始终显示用于选择自定义日期范围的日历。
opens: (string: 'left'/'right'/'center') 设置日期选择器以绑定元素左对齐、右对齐或者居中显示。
drops: (string: 'down' or 'up') 设置日期选择器在绑定元素的下面(默认)或者上面显示。
buttonClasses: (array类型)为日期选择器中的所有button元素添加CSS类。
applyClass: (string类型) 为日期选择器中的apply按钮添加类。
cancelClass: (string类型) 为日期选择器中的cancel按钮添加类。
locale: (object类型) 允许为按钮和标签提供本地化的字符串,自定义日期格式,并更改日历中周的第一天。 查看配置生成器中的“locale配置(包含设置示例)”,以了解如何自定义这些选项。
singleDatePicker: (boolean类型) 只显示一个日历来选择一个日期,而不是带有两个日历的范围选择器;回调函数中提供的开始和结束日期将和选择的单个日期相同。
autoApply: (boolean类型) 隐藏apply和cancel按钮。选择两个日期或预定义范围时,会自动应用新的日期范围。 linkedCalendars: (boolean类型) 启用时,显示的两个日历将始终为两个连续的月份(如:1月和2月),并且当单击日历上方的左侧或右侧箭头时,两个日历都将变化。 禁用时,两个日历可以单独变化并显示任何月/年。
isInvalidDate: (function类型) 在显示两个日历之前传递一个日期参数,然后通过返回true或false,标示该日期是否可供选择。 isCustomDate: (function类型) 在显示两个日历之前传递一个日期参数,然后将返回的CSS类名字符串传或者数组应用在日历中的该日期上。
autoUpdateInput: (boolean类型) 标示日期范围选择器是否应在初始化和所选日期改变时,自动更新绑定在<input>元素上的值。 parentEl: (string类型) 给日期选择器添加父元素的jQuery选择器,如果没有提供,body将被作为父元素。
方法
您可以使用setStartDate和setEndDate方法以程序化的方式更新日期选择器中的startDate和endDate。 您也可以通过绑定到该元素上的data属性访问日期范围选择器对象及其功能和属性。
setStartDate(Date 对象, moment 对象或者string类型): 设置日期范围选择器中当前选择的开始日期为提供的日期 setEndDate(Date 对象, moment 对象或者string类型): 设置日期范围选择器中当前选择的结束日期为提供的日期
示例用法:
// 创建一个新的日期范围选择器
$('#daterange').daterangepicker({ startDate: '03/05/2005', endDate: '03/06/2005' });
// 改变日期选择器中选中的日期范围
$('#daterange').data('daterangepicker').setStartDate('03/01/2014');
$('#daterange').data('daterangepicker').setEndDate('03/31/2014');
事件
日期选择器绑定的元素可以触发以下几个事件,这些事件,您都可以进行监听。
show.daterangepicker: 日期选择器显示后触发事件
hide.daterangepicker: 日期选择器隐藏后触发事件
showCalendar.daterangepicker: 日历显示后触发事件
hideCalendar.daterangepicker: 日历隐藏后触发事件
apply.daterangepicker: apply按钮被点击,或者预定义范围标签被点击时触发事件
cancel.daterangepicker: cancel按钮被点击时触发事件 有些应用需要“清除”而不是“取消”功能,这可以通过更改按钮标签监听cancel事件来实现: $('#daterange').daterangepicker({ locale: { cancelLabel: 'Clear' } }); $('#daterange').on('cancel.daterangepicker', function(ev, picker) { $('#daterange').val(''); });
向构造函数传一个回调函数作为参数是监听所选日期范围更改最简单的方法 ,即使选择未更改,每次应用按钮被点击时,您也可以执行某些操作:
$('#daterange').daterangepicker();
$('#daterange').on('apply.daterangepicker', function(ev, picker) {
startTime=moment().startOf('month').format('YYYY-MM-DD');
endTime=moment().format('YYYY-MM-DD');
});