You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在React-Day-Picker中禁用所有未来日期?

解决react-day-picker禁用所有未来日期的问题

嘿,我之前也碰到过这个困惑!react-day-picker的文档虽然没直接写禁用所有未来日期的方法,但其实可以通过disabledDays的灵活用法来实现,分两种情况看你用的是哪个版本:

如果你用的是v8+版本(最新版)

新版本的disabledDays支持传入一个判断函数,我们可以用这个函数来检查每个日期是否在今天之后,是的话就标记为禁用:

import { DayPicker } from 'react-day-picker';
import 'react-day-picker/dist/style.css';

function MyDateRangePicker() {
  // 把今天的时间重置为00:00:00,避免因当前时间导致当天被误判为未来
  const today = new Date();
  today.setHours(0, 0, 0, 0);

  return (
    <DayPicker
      mode="range" // 开启范围选择模式
      disabledDays={(day) => {
        // 若传入的日期晚于今天,返回true表示禁用
        return day > today;
      }}
    />
  );
}

这里重置今天的时间是关键——如果不这么做,假设现在是下午2点,那么当天的日期对象会包含14:00的时间,而react-day-picker渲染的日期是当天00:00的时间,这时候day > today会返回false(00:00早于14:00),不会影响当天的选择;但重置后能确保逻辑更严谨,不管当前几点,当天都可以正常选中,明天及以后的日期会被禁用。

如果你用的是v7及更早的版本

旧版本的disabledDays支持直接传入配置对象,用after属性就能轻松禁用今天之后的所有日期:

import DayPicker from 'react-day-picker';
import 'react-day-picker/lib/style.css';

function MyDateRangePicker() {
  return (
    <DayPicker
      mode="range"
      disabledDays={{ after: new Date() }}
    />
  );
}

这个配置会自动禁用所有在当前日期之后的日期,非常直观。

两种方法都能完美解决“禁用所有未来日期”的需求,你根据自己的版本选对应的写法就行!

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

火山引擎 最新活动