elementUI el-date-picker type=“daterange“ 限制时间选择

需求:
1.可选中时间不能超过今天
2.可选中时间不能超过10年前
3.时间跨度不能超过6个月

在这里插入图片描述
在这里插入图片描述

特别注意: 如果设置了 default-time 就要注意处理边界情况了 比如:disabledDate 参数 默认是返回 YYYY-MM-DD 00:00:00 ,但是 设置了较大时间的后缀为23:59:59 ,如下方。在 disabledDate 里 参数 返回值为YYYY-MM-DD 23:59:59 这样今天23:59:59之前的时间就无法选中了 所以判断的时候要以今天的23:59:59比较

HTML

<el-date-picker
 v-model="saleTime"
 type="daterange"
 value-format="yyyy-MM-dd HH:mm:ss"
 format="yyyy-MM-dd"
 :default-time="['00:00:00', '23:59:59']"
 range-separator="-"
 start-placeholder="开始日期"
 end-placeholder="结束日期"
 size="mini"
 :picker-options="pickerOptions"
 @change="dateChangePicker"
></el-date-picker>           

JS

<script>
	export default {
		data() {
			return{
				saleTime: "",
				minDate: "",
     			maxDate: "",
     			pickerOptions: {
		        onPick: ({ maxDate, minDate }) => {
		          this.minDate = minDate;//选中的时间较小的一个
		          this.maxDate = maxDate;//选中的时间较大的一个
		        },
		        disabledDate: (time) => {// 设置禁用状态,参数为当前日期,要求返回 Boolean 返回为true禁用
		          // 当前时间的时间戳
		          let curDate = new Date().getTime();
		          // 能查看几年前的时间 单位是年 (当前是10年)
		          let cutTime = 365 * 10 * 24 * 3600 * 1000;
		          // 最小时间的时间戳
		          let minTime = curDate - cutTime;
		          // 时间跨度 当前是6个月
		          let month = 30 * 6 * 24 * 3600 * 1000;
		          // 当前的23点59分59秒
		          let nowLast = new Date(new Date(new Date().getTime()).setHours(23,59,59,999)).getTime();
		          if (this.minDate) {
		            // 判断
		            // 1.遍历时间大于今天(23:59:59)会返回true
		            // 2.遍历时间小于最小时间会返回true
		            // 3.遍历时间大于 选中的时间较小的一个 加上 时间跨度 会返回true
		            // 4.遍历时间小于 选中的时间较小的一个 减去 时间跨度 会返回true
		            return (
		              time.getTime() > nowLast ||
		              time.getTime() < minTime ||
		              time >  new Date(this.minDate.getTime() + month) ||
		              time < new Date(this.minDate.getTime() - month)
		            );
		          }
		          return time.getTime() > Date.now()  || time.getTime() < minTime;
		        },
		      },
			}
		},
		methods:{
			dateChangePicker(e) {
		      if (e === null) {
		        this.minDate = "";
		        this.maxDate = "";
		        this.pickerOptions = {
		           disabledDate: (time) => {
		          // 返回是否禁用
		          // 当前时间的时间戳
		          let curDate = new Date().getTime();
		          console.log(curDate)
		          // 能查看几年前的时间 单位是年 (当前是10年)
		          let cutTime = 365 * 10 * 24 * 3600 * 1000;
		          // 最小时间的时间戳
		          let minTime = curDate - cutTime;
		          // 时间跨度 当前是6个月
		          let month = 30 * 6 * 24 * 3600 * 1000;
		          // 当前的23点59分59秒
		          let nowLast = new Date(new Date(new Date().getTime()).setHours(23,59,59,999)).getTime();
		          if (this.minDate) {
		            // 判断
		            // 1.遍历时间大于今天(23:59:59)会返回true
		            // 2.遍历时间小于最小时间会返回true
		            // 3.遍历时间大于 选中的时间较小的一个 加上 时间跨度 会返回true
		            // 4.遍历时间小于 选中的时间较小的一个 减去 时间跨度 会返回true
		            return (
		              time.getTime() > nowLast ||
		              time.getTime() < minTime ||
		              time >  new Date(this.minDate.getTime() + month) ||
		              time < new Date(this.minDate.getTime() - month)
		            );
		          }
		          return time.getTime() > Date.now()  || time.getTime() < minTime;
		        },
		        };
		      }
		    },
		}
	}
</script>
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值