react-datepicker:仅在18岁以上的年龄才可以设置日期

时间:2018-10-11 12:18:20

标签: reactjs momentjs react-datepicker

我有一个表单,用户可以在其中提交一些所需的信息

其中一个字段是“出生日期”

我正在为该特定字段使用react-datepicker

一段代码如下:

        <label>
          <DatePicker
            autoComplete='off'
            dateFormatCalendar="MMMM"
            showYearDropdown
            scrollableYearDropdown
            onChange={this.handleChange}
            selected={this.state.formData.dob}
            maxDate={moment().subtract(6570, "days")}
            minDate={moment()}
            placeholderText="Date of birth"
            name="dob"
            customInput={
              <Input type='text' onKeyPress={e => e.preventDefault()} validations={[required]} value={this.state.formData.dob} />
            }
          />
        </label>

6570 = 18 * 365是从18年转换的天,我知道这不是一个可靠的日子,因为也有364天

这是datepicker无法选择日期的屏幕截图

https://gyazo.com/4d66a8e59dbca5e79c3af7d6de139d21

任何想法或建议如何实现用户至少要18岁才能提交表单?

谢谢!

5 个答案:

答案 0 :(得分:0)

可以使用Specific date range示例解决此问题。

<DatePicker
    selected={this.state.startDate}
    onChange={this.handleChange}
    minDate={moment().subtract(500, "years")}
    maxDate={moment().subtract(18, "years")}
    showDisabledMonthNavigation
/>

您可以在codesandbox.io上查看有效的演示。

答案 1 :(得分:0)

<DatePicker
    selected={this.state.startDate}
    onChange={this.handleChange}
    dateFormat="dd/MM/yyyy"
    showMonthDropdown
    showYearDropdown
    dropdownMode="select"
    maxDate={subYears(new Date(), 18)}

/>

答案 2 :(得分:0)

上面的解决方案对我不起作用,我只是在moment()。subtract(18,“ years”)之后添加了._d,以仅修剪日期。

我的最终代码:

 <DatePicker
        selected={ selectedDate }
        onChange={ date => setSelectedDate(date) }
        dateFormat='dd/MM/yyyy'
        maxDate={moment().subtract(18, 'years')._d}
        showYearDropdown
        scrollableYearDropdown
      />

答案 3 :(得分:0)

我知道我对这个线程有点晚了>但最近我也被这个问题困住了 如果你想为日期选择器设置一个范围,我想出了这个解决方案

            <DatePicker
              showYearDropdown
              dateFormatCalendar="MMMM"
              yearDropdownItemNumber={150}
              minDate={moment().subtract(150, "years")._d}
              maxDate={moment().subtract(18, "years")._d}
              scrollableYearDropdown
            />

需要添加 Min/Max 和 yearDropdownItemNumber 选项以获得 rangeLocked 响应

我希望它能帮助寻找 rangeLock 的人

答案 4 :(得分:-1)

如果你来这里是为了 React Native,让我为你节省一些时间。道具是:

minimumDate={new Date(moment().subtract(150, "years"))} 

maximumDate={new Date(moment().subtract(18, "years"))}