arco design vue中日期时间选择器只能选当前日期时间之后的时间

文章展示了如何在Vue组件中使用<a-date-picker>,配合ts函数disabledDate和disabledDateTime,阻止用户选择当前时间之前的日期和时刻。当选择日期为当天时,仅允许选择当前时间之后的小时和分钟。

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

1 组件使用

 <a-date-picker
   v-model="formModal.sendTime"
    :disabled-date="disabledDate"
    :disabled-time="disabledDateTime"
    show-time
    :show-now-btn="false"
  />

2 ts部分

<script lang="ts" setup>
  // 禁止选择当前时间之前的日期
  const disabledDate = (current: any) => {
    return current && current < dayjs().startOf('day');
  };

  const range = (start: number, end: number) => {
    const result = [];
    for (let i = start; i < end; i++) {
      result.push(i);
    }
    return result;
  };

  // 禁止选择当时之前的时刻
  const disabledDateTime = (dates: Date) => {
    const hours = dayjs().hour();
    const minutes = dayjs().minute();
    // const seconds = dayjs().second();
    // 当日只能选择当前时间之后的时间点
    if (dates && dayjs(dates).date() === dayjs().date()) {
      if (dayjs(dates).hour() === dayjs().hour()) {
        return {
          disabledHours: () => range(0, hours),
          disabledMinutes: () => range(0, minutes + 5),
          disabledSeconds: () => [],
        };
      }
      return {
        disabledHours: () => range(0, hours + 1),
        disabledMinutes: () => [],
        disabledSeconds: () => [],
      };
    }
    return {
      disabledHours: () => [],
      disabledMinutes: () => [],
      disabledSeconds: () => [],
    };
  };


</script>

3 效果

在这里插入图片描述

在使用 Arco DesignVue3 + TypeScript 开发时,若需要实现两个时间选择器(如开始时间和结束时间),并且要求第二个时间选择器时间必须晚于第一个时间选择器,可以通过动态设置 `disabledDateTime` 和 `v-model` 来实现。 ### 实现思路 1. **绑定两个时间选择器的值**:使用 `v-model` 绑定两个时间选择器的值,分别表示开始时间和结束时间。 2. **动态禁用时间**:通过 `disabledDateTime` 属性,根据第一个时间选择器的值,动态设置第二个时间选择器的可时间范围。 3. **使用 `dayjs` 进行时间处理**:利用 `dayjs` 库对时间进行比较和操作,确保时间格式的统一和逻辑的清晰。 ### 示例代码 以下是一个使用 `Arco Design Vue3` 和 `TypeScript` 的完整实现示例: ```vue <script lang="ts" setup> import { ref, computed } from 'vue'; import dayjs from 'dayjs'; // 定义开始时间和结束时间的响应式变量 const startTime = ref<dayjs.Dayjs | null>(null); const endTime = ref<dayjs.Dayjs | null>(null); // 禁用结束时间选择器中的早于开始时间的日期和时间 const disabledEndDate = computed(() => { return (current: dayjs.Dayjs) => { if (startTime.value) { return current.isBefore(startTime.value, 'day'); } return false; }; }); // 禁用结束时间选择器中的早于开始时间的时刻 const disabledEndDateTime = computed(() => { return (date: dayjs.Dayjs) => { if (startTime.value && date) { // 如果择的日期是开始日期,则禁用该日期中早于开始时间的部分 if (date.isSame(startTime.value, 'day')) { const startHour = startTime.value.hour(); const startMinute = startTime.value.minute(); const startSecond = startTime.value.second(); return { disabledHours: () => range(0, startHour), disabledMinutes: (selectedHour: number) => { if (selectedHour === startHour) { return range(0, startMinute); } return []; }, disabledSeconds: (selectedHour: number, selectedMinute: number) => { if (selectedHour === startHour && selectedMinute === startMinute) { return range(0, startSecond); } return []; }, }; } } return {}; }; }); // 生成数字范围数组的辅助函数 const range = (start: number, end: number) => { const result = []; for (let i = start; i < end; i++) { result.push(i); } return result; }; </script> <template> <a-space direction="vertical" size="large"> <a-date-picker v-model="startTime" show-time format="YYYY-MM-DD HH:mm:ss" placeholder="请择开始时间" /> <a-date-picker v-model="endTime" show-time format="YYYY-MM-DD HH:mm:ss" placeholder="请择结束时间" :disabled-date="disabledEndDate" :disabled-time="disabledEndDateTime" /> </a-space> </template> ``` ### 说明 - `startTime` 和 `endTime` 分别表示开始时间和结束时间。 - `disabledEndDate` 函数用于禁用结束时间选择器中早于开始时间的日期。 - `disabledEndDateTime` 函数用于禁用结束时间选择器中早于开始时间的小时、分钟和秒。 - 使用 `dayjs` 进行时间比较和操作,确保时间逻辑的准确性。 ### 相关问题 - 如何在 Arco Design Vue3 中实现时间选择器的联动? - 如何使用 `dayjs` 处理 Vue3 + TypeScript 项目中的时间逻辑? - 在 Vue3 + TypeScript 中,如何通过计算属性动态控制组件的状态? - Arco Design时间选择器是否支持自定义禁用时间范围? - 如何在 Arco Design Vue3 中实现复杂的表单验证逻辑?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值