disabledDate根据开始时间设置结束时间禁用状态 vue elementUI

这段代码展示了如何在Vue.js应用中使用el-date-picker组件来创建两个日期选择器,一个用于开始日期,一个用于结束日期。结束日期的选择被限制在开始日期之后的一周内,并且初始化为当前日期的一周前和当前日期。此外,开始日期不能选择当前时间之后的日期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>
  <div class="block">
    <span class="demonstration">开始时间</span>
    <el-date-picker
      v-model="startDate"
      type="date"
      value-format="yyyy-MM-dd"
      placeholder="选择日期"
      :picker-options="pickerOptionsStart">
    </el-date-picker>
  </div>
  <div class="block">
    <span class="demonstration">结束时间</span>
    <el-date-picker
      v-model="endDate"
      align="right"
      type="date"
      placeholder="选择日期"
      :picker-options="pickerOptions">
    </el-date-picker>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        //开始时间限制只能选当前时间之前的
        pickerOptionsStart: {
          disabledDate(time) {
            return time.getTime() > Date.now();
          },
        },
        pickerOptions: {
        //结束时间限制只能选开始时间之后一周的,比如开始时间选1号,结束时间只能选7号
          disabledDate:(time) => {//这里不加箭头函数获取不到this.startDate
            if(new Date(time).getTime() > (new Date(this.startDate).getTime() + 6*24*3600*1000)){
                return time.getTime() > new Date(this.startDate).getTime() + 6*24*3600*1000;
            }else{
                return time.getTime() < new Date(this.startDate).getTime() + 5*24*3600*1000;
            }
          },
        },
        startDate: '',
        endDate: '',
      };
    },
    created(){
        this.setDate()
    },
    methods:{
        //设置默认值开始时间为当前时间的一周前,结束时间为当前日期
        setDate(){
            const start = new Date();
            start.setTime(start.getTime() - 6*24*3600*1000);
            this.startDate = start;
            this.endDate = new Date();
        }
    }
  };
</script>

完整代码如上:相关方法有注释。

上面写的开始和结束时间的输入框是两个单独的输入框,结束时间需要根据开始时间进行计算。两者之间的间隔是正好一周,比如:开始时间选完1号之后,结束时间只有7号这一天可以选择,其他时间都被禁用。同时,还设置了一个默认值,即最近的一周,如:今天7号,那么开始时间是1号,结束时间是7号。

### ElementUI 中实现时间选择区间功能的方法 尽管 ElementUI 并未直接提供专门用于年份范围选择的组件,但可以借助 `el-date-picker` 组件及其属性配置来实现时间选择区间的功能。以下是具体实现方式: #### 方法概述 为了实现时间选择区间,通常会结合两个日期选择器分别代表起始时间结束时间,并通过监听事件或数据绑定的方式确保所选时间段的有效性。 --- #### 示例代码 以下是一个基于 Vue2 和 ElementUI时间选择区间实现示例: ```vue <template> <div> <!-- 起始时间 --> <el-date-picker v-model="startDate" type="datetime" placeholder="请选择开始时间" :picker-options="startOptions" value-format="yyyy-MM-dd HH:mm:ss"> </el-date-picker> <!-- 结束时间 --> <el-date-picker v-model="endDate" type="datetime" placeholder="请选择结束时间" :picker-options="endOptions" value-format="yyyy-MM-dd HH:mm:ss"> </el-date-picker> </div> </template> <script> export default { data() { const self = this; return { startDate: '', // 开始时间 endDate: '', // 结束时间 startOptions: { // 起始时间的选择限制 disabledDate(time) { if (self.endDate) { return time.getTime() > new Date(self.endDate).getTime(); } return false; } }, endOptions: { // 结束时间的选择限制 disabledDate(time) { if (self.startDate) { return time.getTime() < new Date(self.startDate).getTime(); } return false; } } }; }, watch: { // 当开始时间变化时,重新计算结束时间的选项 startDate(newVal) { if (!newVal || !this.endDate) return; this.endOptions.disabledDate = function(time) { return time.getTime() < new Date(newVal).getTime(); }; }, // 当结束时间变化时,重新计算开始时间的选项 endDate(newVal) { if (!newVal || !this.startDate) return; this.startOptions.disabledDate = function(time) { return time.getTime() > new Date(newVal).getTime(); }; } } }; </script> ``` --- #### 关键点解析 1. **双向绑定 (`v-model`)** - 使用 `v-model` 将选定的时间值绑定到对应的变量上(如 `startDate` 和 `endDate`),以便实时获取用户输入的数据[^1]。 2. **禁用逻辑 (`disabledDate`)** - 利用 `picker-options` 属性中的 `disabledDate` 函数定义哪些日期不可被选择。 - 对于起始时间,不允许选择晚于已设定结束时间的日期;对于结束时间,则相反[^2]。 3. **动态调整约束条件** - 借助 Vue 的响应式特性,在任一时间发生变化时自动更新另一个时间的选择范围,从而保持两者之间的关联性和一致性。 4. **格式化输出 (`value-format`)** - 设置 `value-format` 参数指定最终提交给后台的时间字符串格式为 `"yyyy-MM-dd HH:mm:ss"`,便于统一处理。 --- #### 注意事项 - 如果项目需求较为复杂(例如支持跨月/年的连续区间选择),可能还需要额外扩展逻辑以满足特定场景下的验证规则。 - 上述方案适用于 Vue2 版本环境搭配 ElementUI 库的情况。如果是其他框架或者更高版本的 Vue,请注意 API 差异并做相应适配。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值