You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ant Design RangePicker日期禁用规则配置技术咨询

Ant Design RangePicker 日期禁用配置方案

要实现你需要的日期禁用规则,核心是利用RangePicker的disabledDate属性,结合日期判断逻辑分别处理开始/结束日期的禁用条件。以下是具体实现代码和逻辑说明:

实现代码

import React, { useState } from 'react';
import { RangePicker } from 'antd';
import moment from 'moment';

const CustomRangePicker = () => {
  const [startValue, setStartValue] = useState(null);

  const disabledDate = (current, picker) => {
    if (picker === 'start') {
      // 开始日期规则:禁用历史日期 + 未来超过2个月的日期
      const twoMonthsLater = moment().add(2, 'months').endOf('day');
      return current && (current < moment().startOf('day') || current > twoMonthsLater);
    } else if (picker === 'end') {
      // 结束日期规则:仅允许每月最后一天 + 不能早于开始日期
      if (!startValue) return false; // 未选开始日期时先不限制
      const isLastDayOfMonth = current.date() === current.daysInMonth();
      return !isLastDayOfMonth || current < startValue.startOf('day');
    }
    return false;
  };

  const onChange = (dates) => {
    if (dates && dates[0]) {
      setStartValue(dates[0]);
    } else {
      setStartValue(null);
    }
  };

  return (
    <RangePicker
      disabledDate={disabledDate}
      onChange={onChange}
      style={{ width: 400 }}
    />
  );
};

export default CustomRangePicker;

逻辑说明

开始日期禁用规则

  • 禁用历史日期:通过current < moment().startOf('day')判断,确保只能选择当天及以后的日期
  • 禁用未来超过2个月的日期:计算当前日期加2个月的最后时刻moment().add(2, 'months').endOf('day'),超出该范围的日期直接禁用

结束日期禁用规则

  • 仅允许每月最后一天:利用current.date() === current.daysInMonth()判断当前日期是否为当月最后一天,非最后一天的日期全部禁用
  • 不能早于开始日期:通过current < startValue.startOf('day')确保结束日期不会早于已选择的开始日期
  • 未选择开始日期时,结束日期暂时不做限制(可根据需求调整)

内容的提问来源于stack exchange,提问作者Arshad Shaikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:37:46