Element Plus-开始时间不能晚于结束时间,包含时间的判断

一、先总结整体-两个时间选择器进行联动:

1.封装子组件data_picker.vue

<!-- 开始结束时间分开 -->
<template>
  <div style="display: inline-block;">
    <el-date-picker type="datetime" v-model="data.startTime" placeholder="开始时间" style="width: 200px"
      :disabledDate="disabledDateFn" :disabled-hours="disabledHours" :disabled-minutes="disabledMinutes"
      :disabled-seconds="disabledSeconds" />
    <el-date-picker type="datetime" v-model="data.endTime" placeholder="结束时间" style="width: 200px"
      :disabledDate="disabledDateFn2" :disabled-hours="disabledHours2" :disabled-minutes="disabledMinutes2"
      :disabled-seconds="disabledSeconds2" />
  </div>
</template>
<script>
  import {
    defineComponent,
    ref,
    reactive,
    watch
  } from 'vue'
  export default defineComponent({
    name: "drDatePicker",
    props: {
      startDate: {
        required: true
      },
      endDate: {
        required: true
      }
    },
    setup(props, {
      emit
    }) {
      const data = reactive({
        startTime: props.startDate,
        endTime: props.endDate,
      });
      watch(
        // reactive监视对象的某个属性,该属性多层嵌套,必须开启深度监视
        () => data.startTime,
        (newVal, oldVal) => {
          emit('update:startDate', newVal);
        },
        () => data.endTime,
        (newVal, oldVal) => {
          emit('update:endDate', newVal);
        }
      );
      //开始时间
      const disabledDateFn = (time) => {
        if (data.endTime != undefined) {
          return time.getTime() > data.endTime.getTime()
        }
      };

      const disabledHours = () => {
        let startTimeMs = new Date(data.endTime).setHours(0, 0, 0, 0);
        let endTimeMs = new Date(data.startTime).setHours(0, 0, 0, 0);
        if (startTimeMs === endTimeMs) {
          let a = [];
          for (let i = 0; i < 24; i++) {
            if (data.endTime.getHours() >= i) continue;
            a.push(i);
          }
          return a;
        }
      };
      const disabledMinutes = () => {
        let startTimeMs = new Date(data.endTime).setHours(0, 0, 0, 0);
        let endTimeMs = new Date(data.startTime).setHours(0, 0, 0, 0);
        if (startTimeMs === endTimeMs) {
          let a = [];
          for (let i = 0; i < 60; i++) {
            // 限制之前 < 之后 > ,下面同理
            if (data.endTime.getMinutes() >= i) continue;
            a.push(i);
          }
          return a;
        }
      };
      const disabledSeconds = () => {
        let startTimeMs = new Date(data.endTime).setHours(0, 0, 0, 0);
        let endTimeMs = new Date(data.startTime).setHours(0, 0, 0, 0);
        if (startTimeMs === endTimeMs) {
          let a = [];
          for (let i = 0; i < 60; i++) {
            // 限制之前 < 之后 > ,下面同理
            if (data.endTime.getSeconds() >= i) continue;
            a.push(i);
          }
          return a;
        }
      };
      //结束时间
      const disabledDateFn2 = (time) => {
        if (data.startTime != undefined) {
          return time.getTime() < new Date(data.startTime.getTime() - 24 * 3600 * 1000);
        }
      };

      const disabledHours2 = () => {
        let startTimeMs = new Date(data.endTime).setHours(0, 0, 0, 0);
        let endTimeMs = new Date(data.startTime).setHours(0, 0, 0, 0);
        if (startTimeMs === endTimeMs) {
          let a = [];
          for (let i = 0; i < 24; i++) {
            if (data.startTime.getHours() <= i) continue;
            a.push(i);
          }
          return a;
        }
      };
      const disabledMinutes2 = () => {
        let startTimeMs = new Date(data.endTime).setHours(0, 0, 0, 0);
        let endTimeMs = new Date(data.startTime).setHours(0, 0, 0, 0);
        if (startTimeMs === endTimeMs) {
          let a = [];
          for (let i = 0; i < 60; i++) {
            if (data.startTime.getMinutes() <= i) continue;
            a.push(i);
          }
          return a;
        }
      };
      const disabledSeconds2 = () => {
        let startTimeMs = new Date(data.endTime).setHours(0, 0, 0, 0);
        let endTimeMs = new Date(data.startTime).setHours(0, 0, 0, 0);
        if (startTimeMs === endTimeMs) {
          let a = [];
          for (let i = 0; i < 60; i++) {
            if (data.startTime.getSeconds() <= i) continue;
            a.push(i);
          }
          return a;
        }
      };
      return {
        data,
        disabledDateFn,
        disabledHours,
        disabledMinutes,
        disabledSeconds,
        disabledDateFn2,
        disabledHours2,
        disabledMinutes2,
        disabledSeconds2,
      }
    }
  })
</script>
<style scoped>

</style>

2.父组件引用

 <drDatePicker  v-model:startDate="data.startDate" v-model:endDate="data.endDate" />

默认开始结束时间: 

const data = reactive({
    startDate:new Date(new Date() - 24 * 60 * 60 * 1000 * 1),
    endDate:new Date(),
})

3.具体说明

  • element pro没有picker-options
  • :disabledDate="disabledDateFn"           对日期
  • :disabled-hours="disabledHours"           对时
  • :disabled-minutes="disabledMinutes"     对分
  • :disabled-seconds="disabledSeconds"   对秒
  • 需要考虑开始或结束时间为null的情况
  • 注意初始赋值的写法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BMG-Princess

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值