React + Ant Design V4.0 DatePicker 不可选择的日期和时间设置

在React应用中,利用Ant Design V4的DatePicker组件,通过配置`disabledDate`和`disabledTime`属性,可以实现只允许用户选择当前及之后的日期和时间,阻止选择过去的日期和时间点。具体实现代码和详细注释说明了如何设置这些属性来达到需求。

需求:选择日期时,只能选择当天及之后的日期,之前的日期不可选;选择时间时,只能选择当日当前及之后的时间点;

例子:如果当前时间时 2021年01月10日 08:08:08,那么 DatePicker 组件可选的日期和时间范围只能是 2021年01月10日 08:08:08 之后的日期和时间,如:2021年01月10日 08:09:00 

解决方案: 因为使用的是 Ant Design V4.0 版本组件库,该 DatePicker 组件有两个属性:disabledDate 和 disableTime ,分别用来控制不可选日期和不可选时间,disabledTime 需要和 showTime 一起使用;详见代码和注释内容:

不可选择日期:

import React from 'react';
import { DatePicker } from 'antd';
import moment from 'moment';

const DatePicker = () => {
  const disabledDate = current => {
    // Can not select days before today and today
    // return current && current < moment().endOf('day');

    // Can not select days before today
    // return current && current < moment().subtract(1, 'days');
    return current && moment(current).isBefore(moment(), 'day');
  }

  return (
    <DatePicker
      format="YYYY/MM/DD HH:mm:ss"
      showTime
      disabledDate={disabledDate}
      placeholder="Please Select Date"
      className="date-picker"
    />
  );
};

export default DatePicker;

不可选时间限制:

import React from 'react';
import { DatePicker } from 'antd';
import moment from 'moment';

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

  const disabledDate = current => {
    return current && moment(current).isBefore(moment(), 'day');
  }
  
  const disabledTime = current => {
    const hours = moment().hours()
    const minutes = moment().minutes()
    // const seconds = moment().seconds()
    const currentHour = moment(current).hour();
    if (current && moment(current).date() === moment().date()) {
      return {
        disabledHours: () => this.range(0, 24).splice(0, hours),
        disabledMinutes: () => {
          if (currentHour === moment().hour()) {
            return this.range(0, 60).splice(0, minutes);
          }
          return [];
        },
        // 秒的限制没什么意义,这里的逻辑也存在问题,解决思路如分钟的限制
        // disabledSeconds: () => this.range(0, 60).splice(0, seconds + 1),
      }
    }
    return {
      disabledHours: () => [],
      disabledMinutes: () => [],
      // disabledSeconds: () => [],
    }
  }

  return (
    <DatePicker
      format="YYYY/MM/DD HH:mm:ss"
      showTime
      disabledDate={disabledDate}
      disabledTime={disabledTime}
      placeholder="Please Select Date and Time"
      className="date-picker"
    />
  );
};

export default DatePicker;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值