vue antD datePicker 结束时间在开始时间之后,且开始时间和结束时间的间隔为一天

结束时间在开始时间之后,且开始时间结束时间间隔一天

<template>
  <a-row class="form-row" :gutter="16">
    <a-col :lg="12" :md="12" :sm="24">
      <a-form-item
        label="开始时间"
        :labelCol="{lg: {span: 10}, sm: {span: 7}}"
        :wrapperCol="{lg: {span: 14}, sm: {span: 17} }"
      >
        <a-date-picker
          v-model="startTime"
          show-time
          format="YYYY-MM-DD HH:mm:ss"
          placeholder="Start"
          @openChange="handleStartOpenChange"
        />
      </a-form-item>
    </a-col>
    <a-col :lg="12" :md="12" :sm="24">
      <a-form-item
        label="结束时间"
        :labelCol="{lg: {span: 6}, sm: {span: 7}}"
        :wrapperCol="{lg: {span: 14}, sm: {span: 17} }"
      >
        <a-date-picker
          v-model="endTime"
          show-time
          format="YYYY-MM-DD HH:mm:ss"
          placeholder="end"
          @openChange="handleEndOpenChange"
        />
      </a-form-item>
    </a-col>
  </a-row>
</template>
<script>
import moment from 'moment'

  export default {
    data () {
      return {
        endTime: '',
        startTime: '',
        endOpen: false,
      }
    },  
    mounted () {
      this.$nextTick(() => {})
    },
    methods: {
      /* 开始时间 */
      handleStartOpenChange (open) {
        if (!open) {
          this.endOpen = true
        }
        /* 时间组件关闭 */
        if (this.endOpen) {
          this.startTime = moment(this.startTime).format('YYYY-MM-DD HH:mm:ss')
          /* 开始时间必须在结束时间之前 */
          if (moment(this.endTime).isBefore(this.startTime, 'day')) {
            //结束时间为开始时间的后一天
            this.endTime = moment(this.startTime).add(1, 'day').format('YYYY-MM-DD HH:mm:ss')
          }
          if (this.endTime !== null) {
            this.endTime = moment(this.endTime).format('YYYY-MM-DD HH:mm:ss')
            this.timeBetween(this.startTime, this.endTime, 'start')
          } else {
            this.endTime = moment(this.startTime).add(1, 'day').format('YYYY-MM-DD HH:mm:ss')
          }
        }
      },
      /* 结束时间 */
      handleEndOpenChange (open) {
        this.endOpen = open
        /* 时间组件关闭 */
        if (!this.endOpen) {
          this.endTime = moment(this.endTime).format('YYYY-MM-DD HH:mm:ss')
          /* 开始时间必须在结束时间之前 */
          if (moment(this.endTime).isBefore(this.startTime, 'day')) {
            // 开始时间为结束时间的前一天
            this.startTime = moment(this.endTime).subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss')
          }
          if (this.startTime !== null) {
            this.startTime = moment(this.startTime).format('YYYY-MM-DD HH:mm:ss')
            this.timeBetween(this.startTime, this.endTime, 'end')
          } else {
            this.startTime = moment(this.endTime).subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss')
          }
        }
      },
      //处理时间间隔为一天的问题
      timeBetween (startTime, endTime, startOrEnd) {
        var moment = require('moment')
        const totalMinute = moment(endTime).diff(startTime) / (1000 * 60)
        const hours = Math.floor(totalMinute / 60)
        const minute = totalMinute % 60
        let result = ''

        if (hours > 0) {
          result = result + hours
          if (result > 24) {
            if (startOrEnd === 'start') {
              this.endTime = moment(startTime).add(1, 'day').format('YYYY-MM-DD HH:mm:ss')
            } else if (startOrEnd === 'end') {
              this.startTime = moment(this.endTime).subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss')
            }
          }
        } else if (hours === 0) { // 选中时间没有间隔
          if (startOrEnd === 'start') {
            this.endTime = moment(startTime).add(1, 'day').format('YYYY-MM-DD HH:mm:ss')
          } else if (startOrEnd === 'end') {
            this.startTime = moment(this.endTime).subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss')
          }
        }

        if (minute > 0) {
        result = result + minute + '分钟'
        }
        if (totalMinute > 1440) {
          if (startOrEnd === 'start') {
            this.endTime = moment(startTime).add(1, 'day').format('YYYY-MM-DD HH:mm:ss')
          } else if (startOrEnd === 'end') {
            this.startTime = moment(this.endTime).subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss')
          }
        } else if (totalMinute === 1440) {
          if (startOrEnd === 'start') {
            this.endTime = moment(startTime).add(1, 'day').format('YYYY-MM-DD HH:mm:ss')
          } else if (startOrEnd === 'end') {
            this.startTime = moment(this.endTime).subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss')
          }
        }
      }
    }
  }
</script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ant Design Vue 的日期选择器(DatePicker)组件提供了 `disabledTime` 属性,该属性可以用来指定某些时间段内的时间是否可选。 如果你想让结束时间不可选,可以在 `disabledTime` 函数中根据当前选择的开始时间来判断。具体实现如下: ```vue <template> <a-date-picker mode="range" :disabled-time="disabledTime" @change="handleDateChange" /> </template> <script> export default { data() { return { startValue: null, endValue: null, }; }, methods: { handleDateChange(values) { [this.startValue, this.endValue] = values; }, disabledTime(current, type) { if (type === 'end') { // 如果当前选择的是结束时间,则判断是否在开始时间之前 return { disabledHours: () => current && current < this.startValue, disabledMinutes: () => current && current < this.startValue, disabledSeconds: () => current && current < this.startValue, }; } return {}; }, }, }; </script> ``` 在上面的例子中,我们定义了一个 `startValue` 和一个 `endValue` 变量来保存用户选择的开始时间结束时间。当用户选择一个开始时间时,我们会将其保存到 `startValue` 中;当用户选择一个结束时间时,我们会将其保存到 `endValue` 中,并使用 `disabledTime` 函数来判断该结束时间是否可选。 在 `disabledTime` 函数中,我们首先判断当前选择的是开始时间还是结束时间,如果是结束时间,则判断其是否在开始时间之前,如果是,则返回一个对象,该对象包含了 `disabledHours`、`disabledMinutes` 和 `disabledSeconds` 三个属性,分别表示不可选的小时、分钟和秒。否则,我们返回一个空对象,表示该时间段内的所有时间都可选。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值