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

今天突然接受到一个离谱的需求:有一个需要配置定时任务开始执行时间的组件,之前的做法都是用<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 实现

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

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

三、Vue3+Element Plus 实现

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

四、拓展

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

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

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

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

javascript 复制代码
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禁用指定日期不可选

html 复制代码
<input
   type="date"
   placeholder="请选择日期"
   id="finishTime"
   name="finishTime"
>

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

javascript 复制代码
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);
相关推荐
烛阴13 分钟前
为什么选择Day.js?比Moment.js更轻更快的日期处理神器
前端·javascript
XiaoLeisj19 分钟前
【JUC】深入解析 JUC 并发编程:单例模式、懒汉模式、饿汉模式、及懒汉模式线程安全问题解析和使用 volatile 解决内存可见性问题与指令重排序问题
javascript·安全·单例模式
moyu8426 分钟前
从 XMLHttpRequest 到 Fetch:AJAX 请求的演进与最佳实践
前端·javascript
划水小将军44 分钟前
睡眠分期 html
前端·javascript·html
工业聚1 小时前
AI 时代的前端成长之路(2025版)
前端·人工智能
blues_C1 小时前
九、【前后端联调篇】Vue3 + Axios 异步通信实战
vue.js·后端·django·axios·drf·测试平台
m0_694845571 小时前
服务器如何配置防火墙管理端口访问?
linux·运维·服务器·前端
EndingCoder1 小时前
React从基础入门到高级实战:React 高级主题 - 性能优化:深入探索与实践指南
前端·javascript·react.js·性能优化·前端框架
Sunny_lxm1 小时前
在 Vue 2中使用 dhtmlxGantt 7.1.13组件,并解决使用时遇到的问题汇总.“dhtmlx-gantt“: “^7.1.13“,
前端·vue.js·甘特图·dhtmlxgantt
江城开朗的豌豆2 小时前
JavaScript篇:前端兼容性历险记:那些年我们踩过的浏览器坑
前端·javascript·面试