借鉴于 https://www.bootcss.com/p/bootstrap-datetimepicker/
本文根据个人在项目使用过程中的经验进行一些总结,比较浅显,暂时不做深入分析。
datetimepicker可以将一个元素包装为时间组件,并设置显示样式、事件回调等。以下主要说明一些option设置,并用实例展示一下效果。
先上一个效果图,单个组件的比较简单,例子展示一下用两个组件拼的timerange。大概逻辑是,选择开始时间(startTime)后,结束时间(endTime)只能选择startTime之后的值,startTime变更后,endTime清空并跟着更新:
图一:选择开始时间 图二:结束时间>开始时间 图三:结束时间>开始时间并只能选当天时间
附上代码:
图一图二组合代码:
initTimeRangeWithSinglePicker("#startTime", "#endTime", 'yyyy-mm-dd hh:ii');
//初始化容器(input)
function initTimeRangeWithSinglePicker(startE, endE, formatStr){
$(startE).datetimepicker({
autoclose:1,
minView:0,
forceParse:0,
minuteStep:1,
format:formatStr,
language: '<%=LocaleUtils.getLocaleStringForJs(request)%>'
});
$(endE).datetimepicker({
autoclose:1,
minView:0,
forceParse:0,
minuteStep:1,
format:formatStr,
language: '<%=LocaleUtils.getLocaleStringForJs(request)%>'
});
}
//开始时间元素的onchange事件监听
function changeStartTime(startE, endE){
var startTime = $(startE).val();
if (startTime != '') {
var dayTimeArr = startTime.split(' ');
var dayTime = dayTimeArr[0];
var timeSelected = startTime + ':01';
$(endE).val(timeSelected);
$(endE).datetimepicker('update');
$(endE).datetimepicker('setStartDate', timeSelected);
$(endE).datetimepicker('update');
}else{
$(endE).val('');
$(endE).datetimepicker('update');
$(endE).datetimepicker('setStartDate', new Date(-8639968443048000));
$(endE).datetimepicker('update');
}
$(endE).val('');
}
图一图三组合代码:
//初始化容器(input)
function initTime(startE, endE, formatStr){
$(startE).datetimepicker({
autoclose:1,
minView:0,
forceParse:0,
minuteStep:1,
format:formatStr,
language: '<%=LocaleUtils.getLocaleStringForJs(request)%>'
});
$(endE).datetimepicker({
autoclose:1,
startView:1,
minView:0,
maxView:1,
forceParse:0,
minuteStep:1,
format:formatStr,
language: '<%=LocaleUtils.getLocaleStringForJs(request)%>'
});
}
//开始时间元素的onchange事件监听
function changeStartTime(startE, endE){
var startTime = $(startE).val();
if (startTime != '') {
var dayTimeArr = startTime.split(' ');
var dayTime = dayTimeArr[0];
var timeSelected = startTime + ':01';
$(endE).val(timeSelected);
$(endE).datetimepicker('update');
$(endE).datetimepicker('setStartDate', timeSelected);
var dayDate= new Date(Date.parse(dayTime.replace(/-/g, "/")));
$(endE).datetimepicker('setEndDate', timestampToTime(dayDate.getTime() + 24*60*60*1000));
$(endE).datetimepicker('update');
}
$(endE).val('');
}
其实差别只在视图设置和endTime的setStartDate值,以下进行option说明。
String. 默认值: 'mm/dd/yyyy'
日期格式, p, P, h, hh, i, ii, s, ss, d, dd, m, mm, M, MM, yy, yyyy 的任意组合。
Integer. 默认值:0
一周从哪一天开始。0(星期日)到6(星期六)
设置组件的开始时间,早于此时间的值不可选中
设置组件的结束时间,晚于此时间的值不可选中
String, Array. 默认值: '', []
从0(周日)到6(周六)的多值组合不可被使用,如'0,6'
,或者 [0,6]
Boolean. 默认值:false
当选择一个日期之后是否立即关闭此日期时间选择器。
Number, String. 默认值:2, 'month'
日期时间选择器打开之后首先显示的视图。 可接受的值:
Number, String. 默认值:0, 'hour'
日期时间选择器所能够提供的最精确的时间选择视图。
Number, String. 默认值:4, 'decade'
日期时间选择器最高能展示的选择范围视图。
Boolean, "linked". 默认值: false
如果此值为true 或 "linked",则在日期时间选择器组件的底部显示一个 "Today" 按钮用以选择当前日期。如果是true的话,"Today" 按钮仅仅将视图转到当天的日期,如果是"linked",当天日期将会被选中。
Boolean. 默认值: false
如果为true, 高亮当前日期。
String. 默认值: 'en'
可以借鉴datetimepicker的locales配置,同时意味着,不需要的language可以从代码中删除。
Boolean. 默认值: true
当选择器关闭的时候,是否强制解析输入框中的值。也就是说,当用户在输入框中输入了不正确的日期,选择器将会尽量解析输入的值,并将解析后的正确值按照给定的格式format
设置到输入框中。
Number. 默认值: 5
此数值被当做步进值用于构建小时视图。对于每个 minuteStep
都会生成一组预设时间(分钟)用于选择。
Date or String. 默认值: new Date()
插件使用方法:
.datetimepicker(options);
移除组件。同时移除已经绑定的event、内部绑定的对象和HTML元素:
.datetimepicker('remove');
更新组件值:
.datetimepicker('update');
设置开始/截至时间:
.datetimepicker('setStartDate', value);
.datetimepicker('setEndDate', value);
changeDate事件:
.datetimepicker()
.on('changeDate', function(ev){
if (ev.date.valueOf() < date-start-display.valueOf()){
....
}
});
暂时先总结到这里,之后总结一篇daterangepicker的使用。