项目场景:
总结一下日期控件实现开始日期、结束日期的选择范围限制,以便更符合实际情况。
需求:
1、开始时间和结束时间都不能选当前日期之后的时间。(当前时间:5月16日)
2、先选开始时间的话,结束时间是在开始时间的后一周内选择,也就是不能选开始时间之前的日期并且对开始时间之后的日期也加了一个限制。
3、先选结束时间的话,开始时间也是在结束时间的前一周内选择,也就是不能选结束时间之后的日期并且对结束时间之前的日期也加了一个限制。
效果如图
实现代码
vue template 代码:
<el-form-item label="开始时间" required><el-date-picker:picker-options="pickerOptionsStart"clearablesize="small"style="width: 200px"v-model="pullForm.startTime"format="yyyy-MM-dd HH:mm:ss"value-format="yyyy-MM-dd HH:mm:ss"type="datetime"placeholder="选择开始时间"></el-date-picker></el-form-item><el-form-item label="结束时间" required><el-date-picker:picker-options="pickerOptionsEnd"clearablesize="small"style="width: 200px"v-model="pullForm.endTime"format="yyyy-MM-dd HH:mm:ss"value-format="yyyy-MM-dd HH:mm:ss"type="datetime"placeholder="选择结束时间"></el-date-picker></el-form-item>}
script 代码:
data() {return {//时间限制,符合日期先后顺序的实际情况pickerOptionsStart: {disabledDate: (time) => {let sevenDays = 6 * 24 * 3600 * 1000; //6天if (this.pullForm.endTime) {return (time.getTime() > Date.now() - 8.64e6 ||//开始日期要在选择的结束日期之前,大于结束时间的日期不能选time.getTime() > new Date(this.pullForm.endTime).getTime() ||//先选结束时间,在结束时间七天之前的不能选(因为包括自身这一天,所以是减去六天)time.getTime() < new Date(this.pullForm.endTime).getTime() - sevenDays);}return time.getTime() > Date.now() - 8.64e6; //今天及之前}},pickerOptionsEnd: {disabledDate: (time) => {let sevenDays = 6 * 24 * 3600 * 1000;if (this.pullForm.startTime) {return (time.getTime() > Date.now() - 8.64e6 ||//结束日期要在选择的开始日期之后,小于开始时间的日期不能选time.getTime() < new Date(this.pullForm.startTime).getTime() ||//先选开始时间,在开始时间七天之后的不能选(因为包括自身这一天,所以是加上六天)time.getTime() > new Date(this.pullForm.startTime).getTime() + sevenDays);}return time.getTime() > Date.now() - 8.64e6; //今天及之前}},}}
总结:
我参考了下面的两篇文章:
文章1:vue element-ui date-picker 日期选择器控件 设置时间范围 限制可选的开始时间和结束时间
文章2:ElementUi 中 日期时间插件DatePicker 限制结束时间大于开始时间且开始时间小于此刻
文章1里面加完那个时间限制不生效,于是我找到了文章二,改了之后就可以用了。(仅仅是弱鸡记录一下,欢迎大家一起交流)