<el-date-picker>配置禁用指定日期之前的时间选择(Vue2、Vue3包括时分秒)

article/2025/6/19 18:25:45

        今天突然接受到一个离谱的需求:有一个需要配置定时任务开始执行时间的组件,之前的做法都是用<el-form>的rules定义校验规则,也能实现效果,但是今天产品突发奇想:不能选的时间就置灰(就是我们说的禁用),直接一脸懵!不够最后还是好心的度娘拯救了我,但是网上大多是Vue2+ELement ui的解决方案,不过我们这个项目是Vue3+Element Puls,不过大差不差。下面我将vue2和vue3的实现方法总结如下:

一、实现原理

        Element  Ui和Element Plus官方提供的配置属性是不一样的,下面介绍一下两者提供的配置属性

1、Element Ui

    Element Ui提供了Picker Options属性,里面有如下参数,其中disabledDate可以实现禁用指定日期的需求

2、Element Plus

        在Element Plus则是通过disabled-date来实现判断日期是否禁用的方法

二、Vue2+Element ui 实现

<el-date-pickerv-model="date"type="date"size="small"value-format="yyyy-MM-dd"format="yyyy-MM-dd":placeholder="'选择日期'":picker-options="pickerOptions"
></el-date-picker>
data(){return {pickerOptions: {disabledDate(time) {return time.getTime() < Date.now() - 8.64e7;}}}
}

        提示:好像有网友说,vue2中这个指定日期的函数必须写到data中,不过我也没试,大家用的时候如果有问题,可以注意一下

三、Vue3+Element Plus 实现

<el-date-pickerv-model="createParams.startTime"class="!w-240px"type="datetime"placeholder="请选择任务开始时间"value-format="x":show-now="false":disabled-date="disabledDate"
/>
const disabledDate = (time: Date) => {return time.getTime() < Date.now() - 8.64e7// - 8.64e7是今天可以选
}

四、Vue3使用进阶版(同时禁用时分秒的选择)

        当我把上面的代码改完提给测试之后,又被测试一顿摩擦:日期选择是被仅用了,时间选择为什么不禁用???所以才有了下面的进阶版

<el-date-pickerv-model="createParams.startTime"class="!w-240px"type="datetime"placeholder="请选择任务开始时间"value-format="x":show-now="false":disabled-date="disabledDate":disabled-hours="disabledHours":disabled-minutes="disabledMinutes":disabled-seconds="disabledSeconds"
/>

// 禁用当前日期之前的时间
const disabledDate = (time: Date) => {return time.getTime() < Date.now() - 8.64e7// - 8.64e7是今天可以选
}// 禁用当前小时之前的小时
const disabledHours = () => {const now = new Date();if (!createParams.startTime) return [];const selectedDate = new Date(createParams.startTime);// 标准化日期,只比较年月日const normalizeDate = (date: Date) => {return new Date(date.getFullYear(), date.getMonth(), date.getDate());};// 非今天日期不限制小时if (normalizeDate(selectedDate).getTime() !== normalizeDate(now).getTime()) return [];const currentHour = now.getHours();// 生成当前小时之前的小时列表(包含当前小时)const disabled = [];for (let i = 0; i < currentHour; i++) {disabled.push(i);}return disabled;
};// 禁用当前分钟之前的分钟
const disabledMinutes = () => {const now = new Date();if (!createParams.startTime) return [];const selectedDate = new Date(createParams.startTime);// 标准化日期,只比较年月日const normalizeDate = (date: Date) => {return new Date(date.getFullYear(), date.getMonth(), date.getDate());};// 非今天日期不限制分钟if (normalizeDate(selectedDate).getTime() !== normalizeDate(now).getTime()) return [];// 如果选择的小时不是当前小时,不限制分钟if (selectedDate.getHours() !== now.getHours()) return [];const currentMinute = now.getMinutes();// 生成当前分钟之前的分钟列表(包含当前分钟)const disabled = [];for (let i = 0; i < currentMinute; i++) {disabled.push(i);}return disabled;
};// 禁用当前秒之前的秒
const disabledSeconds = () => {const now = new Date();if (!createParams.startTime) return [];const selectedDate = new Date(createParams.startTime);// 标准化日期,只比较年月日const normalizeDate = (date: Date) => {return new Date(date.getFullYear(), date.getMonth(), date.getDate());};// 非今天日期不限制秒if (normalizeDate(selectedDate).getTime() !== normalizeDate(now).getTime()) return [];// 如果选择的小时不是当前小时,不限制秒if (selectedDate.getHours() !== now.getHours()) return [];// 如果选择的分钟不是当前分钟,不限制秒if (selectedDate.getMinutes() !== now.getMinutes()) return [];const currentSecond = now.getSeconds();// 生成当前秒之前的秒列表(包含当前秒)const disabled = [];for (let i = 0; i < currentSecond; i++) {disabled.push(i);}return disabled;
};

五、拓展

1、几个常用日期的禁用写法

禁用今日之后的日期(今天可选)

const disabledDate = (time: Date) => {return time.getTime() > this.specifyDate - 8.64e7;  //禁用今天之后的日期(今天可选)
}

禁用指定日期,如禁用大于2025-10-01日期(当前可选)

const disabledDate = (time: Date) => {return time.getTime() > new Date("2025-10-01").getTime() - 8.64e7;
}

2、解释一下上面设置时间的方法

(1)Date.now()获取当前时间(表示自 UNIX 纪元开始(1970 年 1 月 1 日 00:00:00 (UTC))到当前时间的毫秒数)

(2)- 8.64e7 表示可选择当天时间(注:小于当前时间,- 8.64e7 则是禁用日期不包含当前日,若大于当前日期, 8.64e7 则是禁用日期包含当前日)

time.getTime() < Date.now() - 8.64e7  禁用日期不包含当前日

time.getTime() > Date.now() - 8.64e7  禁用日期包含当前日

 (3)time.getTime() < Date.now() - 8.64e7 代表只能选择今天之后的时间【包含今天】(8.64e7:科学计数法,代表8.64×10的7次方)

3、h5禁用指定日期不可选

<inputtype="date"placeholder="请选择日期"id="finishTime"name="finishTime"
>

设置禁止选择小于今天的日期,通过min设置【max禁止选择大于今天的日期】

const date_now = new Date();
const year = date_now.getFullYear();
const month = date_now.getMonth()+1 < 10 ? "0" + (date_now.getMonth() + 1) : (date_now.getMonth() + 1);
const date = date_now.getDate() < 10 ? "0" + date_now.getDate() : date_now.getDate();
$("#finishTime").attr("min", year + "-" + month + "-" + date);

 


http://www.hkcw.cn/article/QCxQcugetk.shtml

相关文章

女孩绿灯过马路被骑电瓶大爷撞倒 女孩爸爸:对方上门道歉,让删除视频自己拒绝了

女孩绿灯过马路时被骑电瓶大爷撞倒,事后大爷走了,女孩爸爸:孩子腿受伤问题不大,后面对方上门道歉,让删除视频自己拒绝了。责任编辑:zx0002

小埃梅里晒与欧冠奖杯合照 永恒的荣耀

在欧冠决赛中,扎伊尔-埃梅里替补出场,帮助巴黎圣日耳曼以5-0战胜国际米兰,赢得了冠军。赛后,扎伊尔-埃梅里在社交媒体上分享了自己与奖杯的合照,并写道:“永恒的荣耀!很自豪将这座期待已久的奖杯带回家,作为一个巴黎人尤其如此。”他还表达了对与球迷共同庆祝胜利的期待…

哈佛蒋雨融:没有任何海外国家绿卡 回应网友争议

6月2日,扬子晚报报道,5月29日在哈佛大学毕业典礼上,蒋雨融作为毕业生代表发表演讲,成为哈佛近四百年校史中第一位站在毕业讲台上的中国女生。她的演讲视频在网络上走红后,有人指出她父亲在绿发会的职位可能为她积累国际活动经历提供了便利,这引发了网友们的大量争议。6月…

ROS机器人和NPU的往事和新知-250602

往事&#xff1a; 回顾一篇五年前的博客&#xff1a; ROS2机器人笔记20-12-04_ros2 移植到vxworks-CSDN博客 里面提及专用的机器人处理器&#xff0c;那时候只有那么1-2款专用机器人处理器。 无关&#xff1a; 01&#xff1a; 每代人的智商和注意力差异是如何出现的-250602-…

双向奔赴好暖!赵露思哽咽安慰哭泣粉丝

6月2日,赵露思的微博线下和粉丝见面。粉丝转为露丝淘了一本《关于爱》的书,希望她能更爱自己。“你真的特别棒!你多吃一点好不好,我好心疼啊。”露丝瞬间泪崩,粉丝说让你这么煽情不是故意的,赵露思哽咽安慰哭泣粉丝:“你就故意的。”责任编辑:zx0002

C罗晒照备战欧国联半决赛 国家队报到展英姿

当地时间6月1日,C罗在社交媒体上分享了他抵达葡萄牙国家队报到的照片。照片中,C罗身穿休闲装,戴着墨镜,背着双肩包,手里拉着行李箱。葡萄牙队将在6月份的国际比赛日期间与德国队进行一场欧国联半决赛。胜者将与西班牙和法国之间的胜者争夺2025年欧国联冠军。此前,葡萄牙队…

莫雷加德称期待与樊振东成为队友 共战新赛季

当地时间6月1日,德国萨尔布吕肯乒乓球俱乐部在欧洲乒乓球冠军联赛男团决赛中第三次夺冠,队中的瑞典选手莫雷加德因表现稳定被评为赛事MVP。欧洲乒联发布了莫雷加德的赛后采访,他对樊振东即将加盟表示非常期待。莫雷加德说:“能和樊振东做队友简直不要太爽,他是个超厉害的选…

【Unity】相机 Cameras

1 前言 主要介绍官方文档中相机模块的内容。 关于“9动态分辨率”&#xff0c;这部分很多API文档只是提了一下&#xff0c;具体细节还需要自己深入API才行。 2 摄像机介绍 Unity 场景在三维空间中表示游戏对象。由于观察者的屏幕是二维屏幕&#xff0c;Unity 需要捕捉视图并将…

Ubuntu20.04 LTS 升级Ubuntu22.04LTS 依赖错误 系统崩溃重装 Ubuntu22.04 LTS

服务器系统为PowerEdge R740 BIOS Version 2.10.2 DELL EMC 1、关机 开机时连续按键盘F2 2、System Setup选择第一个 System BIOS 3、System BIOS Setting 选择 Boot Setting 4、System BIOS Setting-Boot Setting 选择 BIOS Boot Settings 5、重启 开启时连续按键盘F11 …

“黑救护车”为何屡禁不绝 高额费用与监管难题

家住广东省湛江市的张理没想到,外公临终前回家的3公里路竟会花费1800元。2024年8月,因心脏病、肿瘤、器官衰竭等多种老年疾病住院两个月后,张理的外公走到了生命的尽头。医生表示已无救治意义,家属决定带老人回家保守治疗。然而,如何回家成了难题。大多数普通汽车拒载病人…

钓鱼佬被困河中男子用无人机吊上岸 暴雨救援展现科技力量

钓鱼佬被困河中男子用无人机吊上岸 暴雨救援展现科技力量!近日,在浙江丽水,一名垂钓爱好者因突降暴雨导致河水暴涨而被困河道中央。情况危急之际,当地无人机飞手陈先生迅速行动,仅用2分钟就将被困者安全吊运至岸边。这架用于救援的无人机原本是用于农业植保作业,其最大起…

白银价格查询接口如何用Java进行调用?

一、什么是白银价格查询接口&#xff1f; 它聚焦于上海黄金交易所、上海期货交易所等权威市场&#xff0c;精准提供白银价格行情数据&#xff0c;助力用户实时把握市场脉搏&#xff0c;做出明智的投资决策。 二、应用场景 分析软件&#xff1a;金融类平台可以集成本接口&…

警方通报6岁女童被拖进小巷 嫌疑人已被拘留

6月3日,湖南娄底市公安局娄星分局发布了一则警情通报。通报称,2025年5月20日下午,嫌疑人刘某某(男,38岁)酒后行至娄底市娄星区涟滨中街附近,拖拽一名6岁女童进入居民区巷子,后被居民及时制止并报警。民警迅速赶到现场将刘某某控制。经侦查,刘某某涉嫌寻衅滋事已被拘留…

水果放成这样还能吃吗 如何辨别安全食用

水果丰收季节,市场上会出现一些外观异常的水果,如黑丝芒果、豹纹芒果和酒味榴莲等。这些水果有些只是外观奇特,有些则不宜食用。了解如何辨别这些水果对于消费者来说非常重要。发红的甘蔗是不能食用的,因为这表明甘蔗发生了霉变,可能含有节菱孢霉菌及其代谢产物3-硝基丙酸…

贾跃亭哽咽:是散户救了我们的命,FF重生之路

6月3日,在首届“FFAI首年度股东日”活动上,一段贾跃亭的讲话视频流出。一位从乐视早期就追随贾跃亭投资乐视和FF的股民自费从国内飞到洛杉矶参加活动,表达了对贾跃亭东山再起的期盼。现场贾跃亭数度哽咽,他表示FF能够存活下来很大程度上是因为散户的支持。贾跃亭在发言中承…

C语言:内存函数

目录 一、引言 二、memcpy 三、memmove 四、memset 五、memcmp 一、引言 C语言作为一门经典的系统编程语言&#xff0c;以其高效性和底层操作能力广泛应用于操作系统、驱动开发及嵌入式系统中。掌握C语言的内存函数&#xff0c;不仅是写出高性能程序的基础&#xff0c;也是…

女孩高空滑索坠落景区涉事项目整改 安全带隐患待查

女孩高空滑索坠落景区涉事项目整改!6月1日下午4点多,南宁市西乡塘区芦仙山景区飞越丛林探险乐园发生了一起惊险事件。一名10岁女孩在高空滑索过程中,从距离地面七八米的高空中坠落,经医生检查身体并无大碍。据孩子父母说,当天下午2点20分左右,他们带着女儿小枚(化名)上…

苏超出圈火到A股 足球概念股飙升

6月3日,市场低开高走迎来节后开门红,创业板指领涨。A股半天成交额7640.07亿元,较上个交易日缩量76.72亿元。盘面上,市场热点良性轮动,个股涨多跌少,全市场超3400只个股上涨。截至午间收盘,沪指涨0.48%,深成指涨0.35%,创业板指涨0.73%。新消费概念股再度大涨,美容护理…

【笔记】在 MSYS2 MINGW64 环境中降级 NumPy 2.2.6 到 2.2.4

&#x1f4dd; 在 MSYS2 MINGW64 环境中降级 NumPy 到 2.2.4 ✅ 目标说明 在 MSYS2 的 MINGW64 工具链环境中&#xff0c;将 NumPy 从 2.2.6 成功降级到 2.2.4。 &#x1f9f0; 环境信息 项目内容操作系统Windows 11MSYS2 终端类型MINGW64&#xff08;默认终端&#xff09;Py…

蔚来车主高速开车睡觉 李斌回应 强调辅助非自动

蔚来汽车创始人李斌近日转发了一位博主的经历,该博主在下雨天以110km/h的速度在高速公路上开车时睡着了,车辆自动触发紧急靠边停车,并通过SOS电话唤醒车主。李斌借此机会再次提醒大家注意驾驶安全。他提到,“蔚来世界模型NWM”已经量产了“紧急自主靠边停车”功能。当辅助驾…