vue element-ui date-picker 日期选择器控件 设置时间范围 限制可选的开始时间和结束时间

vue element-ui date-picker 日期选择器控件  设置时间范围  限制可选的开始时间和结束时间

总结一下日期控件实现开始日期、结束日期的选择范围限制,以便更符合实际情况。

需求:

1. 开始日期和结束日期都必须是今天之前;

2. 先选择开始日期,那么结束日期必须在开始日期之后,即只能选择开始日期之后的日期;

3. 先选择结束日期,那么开始日期必须在结束日期之前,即只能选择结束日期之前的日期;

三个条件是【且】的关系。

实现效果:

( 注:小编操作和写文日期5月27日)

 

实现代码:

vue  template 代码:


        <el-col :span="8"
          ><el-form-item
            label="演练开始日期"
            prop="startTime"
            :rules="[{ required: true, message: '不能为空', trigger: 'blur' }]"
          >
            <el-date-picker
              v-model="addDrillRecordRow.startTime"
              class="baseInput"
              type="date"
              placeholder="选择日期"
              format="yyyy 年 MM 月 dd 日"
              :picker-options="pickerOptionsStart"
            ></el-date-picker></el-form-item
        ></el-col>
        <el-col :offset="1" :span="8"
          ><el-form-item
            label="演练结束日期"
            prop="endTime"
            :rules="[{ required: true, message: '不能为空', trigger: 'blur' }]"
          >
            <el-date-picker
              v-model="addDrillRecordRow.endTime"
              class="baseInput"
              type="date"
              placeholder="选择日期"
              format="yyyy 年 MM 月 dd 日"
              :picker-options="pickerOptionsEnd"
            ></el-date-picker></el-form-item
        ></el-col>

script 代码

//时间限制,符合日期先后顺序的实际情况
      pickerOptionsStart: {
        disabledDate: time => {
          if (this.addDrillRecordRow.endTime) {
            return (
              time.getTime() > Date.now() - 8.64e6 ||
              time.getTime() > this.addDrillRecordRow.endTime  /*开始日期要在选择的结束日期之前*/
            );
          }
          // return time.getTime() < Date.now() - 8.64e7; /*今天及以后*/
          return time.getTime() > Date.now() - 8.64e6; /*今天及之前,注意数字不一样*/
        }
      },
      pickerOptionsEnd: {
        disabledDate: time => {
          if (this.addDrillRecordRow.startTime) {
            return (
              time.getTime() > Date.now() - 8.64e6 ||
              time.getTime() < this.addDrillRecordRow.startTime /*结束日期要在选择的开始日期之后*/
            );
          }
          return time.getTime() > Date.now() - 8.64e6; /*今天及之前*/
        }
      }

注:这里的addDrillRecordRow是表单数据的绑定对象。

 

总结:

1. 这里实现了日期控件的选择范围限制,时间选择器和日期时间选择器应该也可以类似实现。

2. 类似这种日期选择的功能,在前端做限制处理是比较好的,优化了用户体验,如果放在后台进行验证,可能更加复杂。

 

还可以参考下面两篇文章:

https://blog.csdn.net/weixin_43565820/article/details/89883512

https://www.jianshu.com/p/1804ac782e14

 

有问题欢迎来微信找我!一起学习成长,交个朋友!^_^

微信搜索:acoolgiser,或者直接扫描

 

 

### 配置 `el-date-picker` 支持时间范围选择并调出年份月份选择器 为了实现既可以选择具体的时间范围又可以切换至年份或月份视图的功能,可以通过自定义 `type` 属性以及利用 `picker-options` 来控制可见的快捷选项面板。对于 Vue 2 中使用的 Element UI 或者 Vue 3 下的 Element Plus 组件库而言,这涉及到多个属性之间的协作。 #### 实现方案 通过组合使用不同类型的日期选择框来满足需求: - 使用两个独立的选择器分别用于起始时间结束时间- 利用 `type="datetimerange"` 类型创建一个能够选取连续时间段的选择控件- 对于希望提供更灵活的时间单位(如仅限年/月),则单独设置对应的 `el-date-picker` 单元,并指定其 `type` 参数为 `"year"` 或 `"month"`; 下面给出一段基于上述思路构建的例子代码片段[^1]: ```html <!-- 时间范围选择 --> <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> </el-date-picker> <!-- 年度选择 (可选) --> <el-date-picker v-model="selectedYear" type="year" format="yyyy" placeholder="点击选择年度"> </el-date-picker> <!-- 月份选择 (可选) --> <el-date-picker v-model="selectedMonth" type="month" format="yyyy-MM" placeholder="点击选择月份"> </el-date-picker> ``` 此示例展示了如何在同一页面内集成多种模式下的日期挑选方式。需要注意的是,在实际项目开发过程中可能还需要进一步调整样式布局以适应界面设计的要求。 此外,如果想要在一个组件内部同时拥有这些特性,则需考虑采用插槽(slot)机制或者其他高级技巧来进行定制化扩展[^2]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值