elementUI中2个日期组件实现开始时间、结束时间(禁用日期面板、控制开始时间不能超过结束时间的时分秒)实现方案

没有使用selectableRange 禁用时分秒,是因为他会禁止每天的时分秒。 我们需要解决的是当开始时间、结束时间是同一天时, 开始时间不能超过结束时间。 如果直接清空,用户体验不好。所以用watch监听赋值,当前操作谁,它不满足条件,就改变它本身。

javascript 复制代码
<el-col :span="8">
            <el-form-item label="开始时间" prop="startDate" :rules="globalRules.requiredBlurOrChange">
              <el-date-picker
                v-model="formNew.startDate"
                type="datetime"
                format="yyyy-MM-dd HH:mm:ss"
                value-format="yyyy-MM-dd HH:mm:ss"
                :picker-options="{...editStartOptions}"
                placeholder="选择日期"
                @change="changeDate"
              >
              </el-date-picker>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="完成时间" prop="endDate" :rules="globalRules.requiredBlurOrChange">
              <el-date-picker
                v-model="formNew.endDate"
                type="datetime"
                format="yyyy-MM-dd HH:mm:ss"
                value-format="yyyy-MM-dd HH:mm:ss"
                :picker-options="{...editStopOptions}"
                placeholder="选择日期"
                @change="changeDate"
              >
              </el-date-picker>
            </el-form-item>
          </el-col>

 data() {
    return {
    	 editStartOptions: {
        disabledDate: time => {
          if (!this.formNew.endDate) {
            return time.getTime() < new Date(1970 - 1 - 1).getTime();   //禁止选择1970年以前的日期
          } else {
            return time.getTime() > new Date(this.formNew.endDate);
          }
        },
      },
      editStopOptions: {
        disabledDate: time => {
          //开始时间可以和结束时间相同增加
          let startDate= new Date(this.formNew.startDate);
          startDate.setDate(startDate.getDate() - 1);
          return (
            time.getTime() < startDate || time.getTime() < new Date(1970 - 1 - 1).getTime()    //禁止选择1970年以前的日期
          );
        },
      },
    }
}


watch: {
    'formNew.startDate': {
      handler(newVal) {
        if (newVal && this.formNew.endDate && new Date(newVal).getTime() > new Date(this.formNew.endDate).getTime()) {
          this.formNew.startDate = this.formNew.endDate
          console.log(newVal, 'newVal')
        }
      }
    },
    'formNew.endDate': {
      handler(newVal) {
        if (newVal && this.formNew.startDate && new Date(newVal).getTime() < new Date(this.formNew.startDate).getTime()) {
          // this.formNew.startDate = newVal;
          this.formNew.endDate = this.formNew.startDate
        }
      }
    },
  },
相关推荐
muddjsv1 小时前
前端性能优化实战:从加载到渲染的全面提速指南
前端·性能优化
deli0070072 小时前
JSON 树形查看器:粘贴即解析,折叠展开一目了然
前端·数据库·json·ai编程
guanguan0_02 小时前
PageProxy:页面维度接口地图 + 一键场景切换
前端·ai编程·请求代理·proxy工具
liangshanbo12152 小时前
虚拟列表深度面试题整理
java·开发语言·前端
IT_陈寒3 小时前
Redis内存警告竟是因为这个不起眼的配置项
前端·人工智能·后端
lilian2333 小时前
Harmony os 技术实战|拼豆制图43:压缩字符矩阵上线前如何拦住错位图纸
开发语言·前端·华为·矩阵·harmonyos
kyriewen3 小时前
我踩了3次同一个坑才明白:JavaScript里比0.1+0.2更隐蔽的5个数字陷阱
前端·javascript·面试
徐小夕4 小时前
表格、文档、甘特、大屏、表单一站打通:pxcharts超级表格4.0正式上线!
前端·算法·github
用户594404103564 小时前
Vue3 + TypeScript + Leaflet.js 实战:构建企业级地理信息应用
前端
kyson_4 小时前
一次搭好 ESLint + Prettier + Husky + lint-staged 前端代码工作流
前端