Vue3 + Element Plus 日期选择器:开始 / 结束时间,结束时间不超过今天

写一个完整可直接复制使用的示例,包含:

  • 开始时间 ≤ 结束时间
  • 结束时间 最大只能选今天
  • 禁用逻辑联动(选完开始时间后,结束时间不能早于开始时间)
  • 支持 date / daterange 两种常用场景

完整代码(推荐:两个独立日期选择器)

vue 复制代码
<template>
  <div class="date-picker-box" style="display: flex; gap: 20px; margin: 20px;">
    <!-- 开始时间 -->
    <el-date-picker
      v-model="startDate"
      type="date"
      placeholder="选择开始时间"
      :disabled-date="disabledStartDate"
      value-format="YYYY-MM-DD"
    />

    <!-- 结束时间 -->
    <el-date-picker
      v-model="endDate"
      type="date"
      placeholder="选择结束时间"
      :disabled-date="disabledEndDate"
      value-format="YYYY-MM-DD"
    />
  </div>
</template>

<script setup>
import { ref } from 'vue'

// 时间绑定
const startDate = ref('')
const endDate = ref('')

// 今天的日期(用于禁用未来日期)
const today = new Date()

// 【开始时间禁用逻辑】:不能选未来日期(可选,根据需求)
const disabledStartDate = (time) => {
  // return time.getTime() > today.getTime() // 开启则开始时间也不能超过今天
  return false // 关闭则开始时间可以选未来日期
}

// 【结束时间禁用逻辑】:核心!
// 1. 不能早于开始时间
// 2. 不能超过今天
const disabledEndDate = (time) => {
  const startTime = startDate.value ? new Date(startDate.value) : null
  
  // 条件1:小于开始时间 → 禁用
  if (startTime && time.getTime() < startTime.getTime()) {
    return true
  }
  
  // 条件2:大于今天 → 禁用
  return time.getTime() > today.getTime()
}
</script>

如果你用的是 范围选择器(daterange)

更简洁,一个控件搞定:

vue 复制代码
<template>
  <el-date-picker
    v-model="dateRange"
    type="daterange"
    range-separator="至"
    start-placeholder="开始时间"
    end-placeholder="结束时间"
    :disabled-date="disabledDate"
    value-format="YYYY-MM-DD"
  />
</template>

<script setup>
import { ref } from 'vue'
const dateRange = ref([])
const today = new Date()

// 范围选择器禁用:只能选今天及以前
const disabledDate = (time) => {
  return time.getTime() > today.getTime()
}
</script>

核心说明

  1. disabled-date

    Element Plus 提供的禁用日期函数,返回 true 则该日期不可选。

  2. 结束时间限制

    • time.getTime() > today.getTime() → 禁止选择今天以后的日期
    • 联动开始时间 → 禁止选择早于开始时间的日期
  3. 格式
    value-format="YYYY-MM-DD" 直接输出字符串格式,不用自己处理 Date 对象。


总结

  • 两个独立选择器:结束时间 ≤ 今天 ,且不早于开始时间
  • 范围选择器:直接限制整个区间不超过今天
  • 代码可直接复制到 Vue3 + Element Plus 项目中使用
相关推荐
parade岁月几秒前
告别 Deno 时代?运行时进入一年倒计时,Deno 团队并入 Cloudflare
前端
Lucky_Turtle4 分钟前
【HTML】前端页面禁止缩放
前端·html
孟陬9 分钟前
JavaScript 反引号(` backtick)和双引号的不完全等价 ≠ 场景
javascript·node.js·bun
恋猫de小郭9 分钟前
Genkit Dart 1.0 发布,Flutter 原生的 AI Agent 终于完整了
android·前端·flutter
专业程序开发源14 分钟前
django便利店外卖后台管理系统19650-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·django·课程设计
思码梁田17 分钟前
CSS transform 转换详解:translate、rotate、scale、skew 与 3D 变换一次讲清
前端·css·transform·skew·scale·translate·rotate
第10086个小白22 分钟前
flutter桌面端打包方式(Inno Setup Compiler)版本
前端·flutter
派小心.35 分钟前
多端数据分析平台的漏斗可以跨端搭建吗?5 步搭出跨端转化漏斗
大数据·运维·服务器·前端·数据分析
IT_陈寒1 小时前
为什么我的React组件一直在意外重渲染?
前端·人工智能·后端
Su米苏1 小时前
基于 Token 预算的上下文压缩控制器(Context Compaction Controller)
前端·数据库·人工智能