element DateTimePicker 日期时间选择器 选择范围限制

内容需求:

两个DateTimePicker选择日期范围需要做日期范围限制;

开始时间必须小于结束时间;结束时间必须大于开始时间;

开始时间和结束时间可以选择同一天;可以只选择结束开始时间,或只选择结束时间

代码:

picker-options来控制不可以选择范围

 

					<div class="flex-wrap">
						<el-date-picker 
                            class="uni-startTime_show"
							type="datetime"
							placeholder="开始日期"
							:picker-options="startTime"
							value-format='yyyy-MM-dd HH:mm'
                            format="yyyy-MM-dd HH:mm"
							v-model="searchForm.startTime_show"
						></el-date-picker>
						-
						<el-form-item
							prop="endTime_show"
							ref="endTime_show"
						>
							<el-date-picker
								type="datetime"
								placeholder="结束日期"
								:picker-options="endTime"
								value-format='yyyy-MM-dd HH:mm'
                                format="yyyy-MM-dd HH:mm"
								v-model="searchForm.endTime_show"
							></el-date-picker>
						</el-form-item>
					</div>

 在data中定义开始时间 startTime和结束时间endTime的不可以选择范围

因为这里的限制有些问题: - 8.64e7的问题就是  当开始时间选择为某天的凌晨结束时间却可以选择开始时间的前一天;如果不 - 8.64e7开始时间和结束时间就不能选择同一天

所以需要一个验证规则,当选择日期时间需要做一个表单验证  Rules 绑定到对应的表单上

 

 

data() {
    return {
         startTime: {
            disabledDate: time => {
                if (this.searchForm.endTime_show) {
                    // 设置开始时间小于结束时间
                    return time.getTime() > new Date(this.searchForm.endTime_show).getTime()  
                }
            }
        },
        endTime: {
            disabledDate: time => {
                if (this.searchForm.startTime_show) {
                    // 结束时间大于开始时间
                    return time.getTime() < new Date(this.searchForm.startTime_show).getTime() - 8.64e7; //如果不减8.64e7开始时间和结束时间就不能选择同一天
                }
            }
        },
        searchRules:{
          startTime_show:[
            {
              validator:(rule, value, callback) => {
                let startTime=this.searchForm.startTime_show;
                startTime= new Date(Date.parse(startTime));
                console.log("startTime",startTime)
  
                let endTime=this.searchForm.endTime_show;
                // endTime= endTime.replace("-","/");//替换字符,变成标准格式
                endTime= new Date(Date.parse(endTime));
                if(startTime > endTime) {
                  return callback(new Error('开始时间不能大于结束时间'));
                }else{
                  callback();
                }
              },
              trigger: "change"
            }
          ],
          endTime_show:[
            {
              validator:(rule, value, callback) => {
                let startTime=this.searchForm.startTime_show;
                startTime= new Date(Date.parse(startTime));
                console.log("startTime",startTime)
  
                let endTime=this.searchForm.endTime_show;
                // endTime= endTime.replace("-","/");//替换字符,变成标准格式
                endTime= new Date(Date.parse(endTime));
                if(endTime < startTime) {
                  return callback(new Error('结束时间不能小于开始时间'));
                }else{
                  callback();
                }
              },
              trigger: "change"
            }
          ]
        }
    }
}

总结:

这种做法还是有很多的弊端,比如不能精确到小时分钟的限制选择  ,只能通过表单验证来判断时间范围限制

借鉴文章链接:

https://blog.csdn.net/weixin_46074961/article/details/106403555

https://blog.csdn.net/weixin_39629969/article/details/111543699

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值