React.js:更改为过去时禁用DateTime

时间:2016-10-10 15:13:53

标签: javascript datetime reactjs react-datetime

我正在使用react-datetime并希望禁止任何人过去选择日期/时间,因为这会发送过去似乎不应该发送的电子邮件。 Documentation向我展示了如何在之前禁用日期,但是当我尝试禁用分钟时,它仍然可以在日历的下拉框中手动更改。下面的代码是大型电子邮件平台的一部分,但应该能够对代码片段有所了解。文件存在here,您也可以在那里看到整个回购。

理想情况下,如果有人选择过去一分钟或更长时间的日期或时间,它应该跳回当前状态,并且只能在当前时刻“发送”。任何帮助都将是fab - 谢谢!

  isValidDate(dt) {
    return (dt >= (moment().startOf('day')))
      && (dt <= moment().add(30, 'days'))
      && moment().subtract(1, 'minute');
  }

我已经尝试过以上操作,但仍然可以手动编辑:(

class EmailSendDialog extends Component {
  constructor(props) {
    super(props);
    this.state = {
      listId: null,
      now: true,
      date: moment(),
      tz: this.defaultTz
    };
  }

  handleDateTimeSelect(date) {
    this.setState({ date });
  }

  isValidDate(dt) {
    return (dt >= (moment().startOf('day')))
      && (dt <= moment().add(30, 'days'))
      && moment().subtract(1, 'minute');
  }

要渲染,我有这个:

      <DateTime
        value={date}
        dateFormat="D MMM YYYY"
        isValidDate={this.isValidDate}
        onChange={(_date) => this.handleDateTimeSelect(_date)}
      />

1 个答案:

答案 0 :(得分:2)

很酷 - 我会继续回答我自己的问题;)

  handleDateTimeSelect(date) {
    if (date < moment()) {
      date = moment();
    }
    this.setState({ date });
  }

这设定了我们现在所处的时刻,即使您尝试手动更改它,它也会跳回来。

<强>修订
为了减少计算量,我最后使用了以下内容:

  handleDateTimeSelect(date) {
    const currentDate = moment();
    date = date < currentDate ? currentDate : date;
    this.setState({ date });
  }