web技术分享日期选择限制组件二次封装

这篇博客详细介绍了如何在Vue3项目中使用ElementPlus的DatePicker组件,实现开始时间与结束时间的限制。包括禁止选择开始时间在特定日期之前,结束时间在当前时间之后,以及确保时间跨度不超过一年。通过`disabledDate`和`calendarChange`等方法进行定制,同时封装了`setTimeFn`方法供父组件调用。
摘要由CSDN通过智能技术生成

vue3 + element plus 的项目

项目需求:

开始时间限制:存在某天之前的时间禁选结束时间限制:当天之后时间禁选开始时间与结束时间的跨度最大不超过一年使用 element plus 的 DatePicker 日期选择器

封装结构如下

<el-date-picker    v-model="datePicker.time"    type="daterange"    value-format="X"    :default-time="datePicker.defaultime"    format="YYYY-MM-DD"    size="large"    range-separator="至"    start-placeholder="开始时间"    end-placeholder="结束时间"    @change="timeChange"    :disabled-date="disabledDate"    @calendar-change="calendarChange"    class="date_picker_custom"  />

复制代码

vue3 + ts 的 setup 中

startDisabledTime 禁用开始时间(毫秒)setTimeFn 设置时间,传参可参考 DatePicker 的 v-model 文档 emit("change") 事件传递给父组件获取时间区段

const prop = defineProps({  // 禁用开始时间(毫秒)  startDisabledTime: {    type: Number,    default: 0,  },});const emit = defineEmits(["change"]);const datePicker = reactive({  time: "" as Date | number | string,  // 记录开始时间(选择区间所需)  startData: null as number | null,  defaultime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)],});// 选中日历日期后会执行的回调!!只选择一个日期就会执行,官网写的不清楚// 主要用这个方法获取到用户选择的初始时间,然后在禁用方法里通过这个时间设置结束时间的禁用时间const calendarChange = (dates: any) => {  let hasSelectDate = dates !== null && dates.length > 0;  datePicker.startData = hasSelectDate    ? Math.floor(dates[0].getTime() / 1000)    : null;};const disabledDate = (time: any) => {  const timeRange = 1 * 24 * 60 * 60 * 1000; // 1天时间戳  const tempTime = Date.now();  if (datePicker.startData) {    const sta = datePicker.startData * 1000 - timeRange * 365;    const minTime = sta < prop.startDisabledTime ? prop.startDisabledTime : sta;    const maxTime = datePicker.startData * 1000 + timeRange * 365;    if (tempTime < maxTime) {      return time.getTime() < minTime || time.getTime() > tempTime;    }    return time.getTime() < minTime || time.getTime() > maxTime;  } else {    return (      time.getTime() >= tempTime || time.getTime() < prop.startDisabledTime    );  }};const timeChange = (dates: any) => {  let hasSelectDate = dates !== null && dates.length > 0;  datePicker.startData = hasSelectDate ? Number(dates[0]) : null;  emit("change", dates);};
// 设置日期const setTimeFn = (time: Date | number | string) => {  datePicker.time = time;};// 暴漏方法给父组件defineExpose({ setTimeFn });

复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珍儿2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值