5

我想知道如何防止用户选择高于今天日期的日期。例如,今天是 3.7,所以让它成为用户可以选择的最高结束日期。

<DateRangePicker
    startDate={this.state.startDate} 
    startDateId="startDate" 
    endDate={this.state.endDate} 
    endDateId="endDate" 
    onDatesChange={({ startDate, endDate }) => {
      this.setState({ startDate, endDate }, () => {});
    }} 
    focusedInput={this.state.focusedInput} // PropTypes.oneOf([START_DATE, END_DATE]) or null,
    onFocusChange={focusedInput => this.setState({ focusedInput })} // PropTypes.func.isRequired,
    daySize={50}
    noBorder={true}
    isOutsideRange={() => false}
/>
4

5 回答 5

5

您应该使用isOutsideRange道具和Moment.js来处理可用的日期范围。例如,您可以通过这种方式只允许选择过去 30 天内的日期:

代码沙盒

import React, { Component } from "react";
import moment from "moment";
import "react-dates/initialize";
import "react-dates/lib/css/_datepicker.css";
import { DateRangePicker } from "react-dates";
import { START_DATE, END_DATE } from "react-dates/constants";

export default class Dates extends Component {
  state = {
    startDate: null,
    endDate: null,
    focusedInput: null
  };

  onDatesChange = ({ startDate, endDate }) =>
    this.setState({ startDate, endDate });

  onFocusChange = focusedInput => this.setState({ focusedInput });

  isOutsideRange = day =>
    day.isAfter(moment()) || day.isBefore(moment().subtract(30, "days"));

  render() {
    const { startDate, endDate, focusedInput } = this.state;

    return (
      <DateRangePicker
        startDate={startDate}
        startDateId={START_DATE}
        endDate={endDate}
        endDateId={END_DATE}
        onDatesChange={this.onDatesChange}
        focusedInput={focusedInput}
        onFocusChange={this.onFocusChange}
        daySize={50}
        noBorder={true}
        isOutsideRange={this.isOutsideRange}
      />
    );
  }
}

于 2019-07-04T13:45:44.150 回答
4

我不知道你是否找到了解决方案。但我还是给出了我的解决方案。

您可以使用 import { isInclusivelyBeforeDay }from react-dates 并使用isOutsideRange={day => !isInclusivelyBeforeDay(day, moment())}

希望能帮助到你

于 2019-10-21T09:20:37.680 回答
0

我在另一个反应日期选择器包上遇到了类似的问题。在阅读了您的文档(AirBnb 文档)之后,我发现在他们的 GitHub 上提到了这个问题: 设置日期范围 #86

似乎有一个调用isOutsideRange了一个函数的道具。例如,您可以返回false当前日期之外的任何日期,只需进行比较即可。

希望能帮助到你

于 2019-07-03T14:34:45.870 回答
0

功能

isOutsideRange(day) {
    return (moment().diff(day) < 0);
  }

...

<DateRangePicker
isOutsideRange={this.isOutsideRange}
>
于 2021-02-18T19:06:04.277 回答
0

在最新的日期范围选择器版本中,我只使用了maxDate={new Date()}. 这对我来说很好。这不允许我选择比今天更多的东西。

于 2022-03-03T06:05:29.627 回答