【element】el-date-picker限制只可以选择前后一个月时间,只能选择今年的时间,大于今天的不可选(或 只能选择当前时间的前三个月的和当前之前的)

9 篇文章 1 订阅

控制选择开始时间后、结束时间只能前后一个月,整体选择时间必须大于等于今年 

 上代码:

通过配置pickerOptions添加限制:

<template>
 <el-date-picker
   v-model="valueDate"
   type="daterange"
   :picker-options="pickerOptions"
   range-separator="-"
   start-placeholder="开始日期"
   end-placeholder="结束日期"
   align="right"
   format="yyyy-MM-dd"
   value-format="yyyy-MM-dd" >
</template>

在pickerOptions中,通过 onPick监听选中的第一个时间,disabledDate实时控制第二个时间的选择范围

<script>
data(){
    return{
      valueDate:null,
      // 选中时间:
      choiceDate0: "",
      pickerOptions: {
        // 配置快捷选中
        shortcuts: [
          {
            text: "最近一周",
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
              picker.$emit("pick", [start, end]);
            },
          },
          {
            text: "最近一个月",
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
              picker.$emit("pick", [start, end]);
            },
          },
        ],
        onPick: ({ maxDate, minDate }) => {
          // 选中的时间
          this.choiceDate0 = minDate.getTime();
          if (maxDate) {
            this.choiceDate0 = "";
          }
        },
        disabledDate: (time) => {
          // 判断:
          // 只能选择当前时间的前三个月的和当前之前的
          var threeDate = new Date(); 
          threeDate.setMonth(threeDate.getMonth() - 3)
          return time.getTime()<threeDate.getTime() || time.getTime()> new Date().getTime()


          /*********其他的判断(和上面二选一)**************/
          // 只可以选择前后一个月时间,只能选择今年的时间,大于今天的不可选
          // 获取今年的时间
          let this_year_time=new Date(new Date().getFullYear()+'/01/01')
          // 选中时间的Date
          let choiceDateTime = new Date(this.choiceDate0).getTime();
          // 一个月前的日期
          const minTime = new Date(choiceDateTime).setMonth(
            new Date(choiceDateTime).getMonth() - 1
          );
          // 一个月后的日期
          const maxTime = new Date(choiceDateTime).setMonth(
            new Date(choiceDateTime).getMonth() + 1
          );
          const min = minTime;
          const max = maxTime;
          
          // 判断:
          // 有选择时间时
          if (this.choiceDate0) {
            // 大于选择第一时间下个月的时间不可选,大于今天不可选
            if(time.getTime() > max || time.getTime()> new Date().getTime()){
              return true
            }
            // 小于选择第一时间上个月的时间不可选、小于今年的时间不可选
            if(time.getTime() < this_year_time || time.getTime() < min){
              return true
            }
          }
          // 小于今年的时间不可选,大于今天的不可选
          return time.getTime() < this_year_time || time.getTime()> new Date().getTime()
        },
      },
    }
}
</script>

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值