el-data-picker禁用时间(vue2 vue3)

如果要用到跨选时间禁用(不能选择时间范围超过三个月、半年、多少天等,选择了开始日期时开始判断)

vue2:

<el-date-picker
    size="mini"
    v-model="timeArr"
    type="daterange"
    start-placeholder="开始日期"
    end-placeholder="结束日期"
    value-format="yyyy-MM-dd"
    style="width: 220px"
    :picker-options="pickerOptions"
    @change="onChangeTime"
    @focus="onDateFocus"
>
</el-date-picker>



data:{
    pickerObj: {},
    pickerOptions: {
         onPick: this.getPickDate,
         disabledDate: this.disabledDate,
    },
}  

methods:{
        getPickDate(e) {
            this.pickerObj = e;
        },
        disabledDate(time) {
          let authStart = dayjs(this.user.startDate, "YYYY-MM-DD").format("YYYY-MM-DD");
          let authEnd = dayjs(this.user.endDate, "YYYY-MM-DD").format("YYYY-MM-DD");
          const { minDate, maxDate } = this.pickerObj;
          if (minDate) {
                const diff = Math.abs(minDate.getTime() - time.getTime());
                if (
                    diff > 1000 * 3600 * 24 * 180 ||
                    dayjs(time).format("YYYY-MM-DD") < authStart ||
                    dayjs(time).format("YYYY-MM-DD") > authEnd
                ) {
                    return true;
                }
           } else {
             return dayjs(time).format("YYYY-MM-DD") < authStart || dayjs(time).format("YYYY-MM-DD") > authEnd;
            }
        },
}
        

vue3:

<el-date-picker
    @change="onChangePicker"
    @calendar-change="onChangePanel"
    style="width: 300px"
    class="data-time"
    v-model="state.timeArr"
    type="daterange"
    value-format="YYYY-MM-DD"
    range-separator="-"
    start-placeholder="开始日期"
    end-placeholder="结束日期"
    :disabledDate="disabledDate"
></el-date-picker>


const state = reactive({
    timeArr: [],
    sPickerTime: [], //选的日期数组 用于做跨选范围禁用
    timeRange: 31, //跨选天数
});


methods:{
const onChangePicker = (val) => {
    //点击叉号清空选中的time
    if (!val) {
        state.sPickerTime = [];
    }
};
// 选中日期
const onChangePanel = (time) => {
    state.sPickerTime = time || [];
};
// 禁止的日期范围
const disabledDate = (time) => {
    let minDate = state.sPickerTime?.length ? state.sPickerTime[0] : "";
    const currentDate = dayjs(time); // 获取当前日期
    const selectedDate = dayjs(minDate); // 获取选择的日期
    if (minDate) {
        // 计算选择日期与当前日期之间的差值(以天为单位)
        const diffInDays = selectedDate.diff(currentDate, "day");
        // 判断差值是否超过一月的范围
        if (Math.abs(diffInDays) > state.timeRange) {
            return true;
        }
    }
    return dayjs(time) > dayjs(); // 允许选择日期
};
}

大体思路如上  按照需求修改对应代码即可

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值