基于Vue3 + Element Plus实现的日期选择器

 更新时间:2026年03月24日 09:13:28   作者:还是大剑师兰特  
本文介绍了使用Vue3和ElementPlus实现日期选择器的方法,包括禁用逻辑联动、设定结束时间不能选今天、时间格式化等功能,通过示例代码展示了两种常用场景的实现方式,适用于直接复制使用,需要的朋友可以参考下

实现效果

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

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

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

<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)

更简洁,一个控件搞定:

<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>

核心说明

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

结束时间限制

  • time.getTime() > today.getTime() → 禁止选择今天以后的日期
  • 联动开始时间 → 禁止选择早于开始时间的日期

格式
value-format="YYYY-MM-DD" 直接输出字符串格式,不用自己处理 Date 对象。

总结

  • 两个独立选择器:结束时间 ≤ 今天,且不早于开始时间
  • 范围选择器:直接限制整个区间不超过今天
  • 代码可直接复制到 Vue3 + Element Plus 项目中使用

以上就是基于Vue3 + Element Plus实现的日期选择器的详细内容,更多关于Vue3 Element Plus日期选择器的资料请关注脚本之家其它相关文章!

相关文章

  • vue项目使用定时器每隔几秒运行一次某方法代码实例

    vue项目使用定时器每隔几秒运行一次某方法代码实例

    有时候在项目中我们经常需要设置简单的倒计时功能,这个可以通过定时器来实现,下面这篇文章主要给大家介绍了关于vue项目使用定时器每隔几秒运行一次某方法的相关资料,需要的朋友可以参考下
    2023-04-04
  • 浅谈vue限制文本框输入数字的正确姿势

    浅谈vue限制文本框输入数字的正确姿势

    这篇文章主要介绍了vue限制文本框输入数字的正确姿势,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 如何理解Vue中computed和watch的区别

    如何理解Vue中computed和watch的区别

    这篇文章主要介绍了Vue中computed和watch的区别,对Vue感兴趣的同学,可以参考下
    2021-05-05
  • 概述VUE2.0不可忽视的很多变化

    概述VUE2.0不可忽视的很多变化

    本文给大家分析下vue2.0几个重要的与自己目前项目相关的变化,也是vue2.0不可忽视的变化,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • 通用vue组件化展示列表数据实例详解

    通用vue组件化展示列表数据实例详解

    组件化开发能大幅提高应用的开发效率、测试性、复用性等,下面这篇文章主要给大家介绍了关于通用vue组件化展示列表数据的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • vue和uniapp页面实现自动滚动到最底部

    vue和uniapp页面实现自动滚动到最底部

    这篇文章主要介绍了vue和uniapp页面实现自动滚动到最底部方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • vue单页面应用部署配置详解

    vue单页面应用部署配置详解

    本文主要介绍了vue单页面应用部署配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 关于vue中@click.native.prevent的说明

    关于vue中@click.native.prevent的说明

    这篇文章主要介绍了关于vue中@click.native.prevent的说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Vue中使用vux配置代码详解

    Vue中使用vux配置代码详解

    这篇文章主要介绍了Vue中使用vux配置代码详解,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • 解决vscode进行vue格式化,会自动补分号和双引号的问题

    解决vscode进行vue格式化,会自动补分号和双引号的问题

    这篇文章主要介绍了解决vscode进行vue格式化,会自动补分号和双引号的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论