Как отключить будущие даты в reactjs?

Я не использую datepicker, но код работает нормально. На данный момент я выбрал тип ввода, и все работает нормально. Теперь я хочу отключить будущие даты. Как мне это сделать?

<div className = "form-group col-md-6">
                            <label for = "inputDate4">Date of Birth</label>
                            <input type = "date" className = "form-control" id = "inputDate4" placeholder = "Date of Birth" name = "dob" onChange = {this.handleChangeEvent} />
                        </div>

Редактировать: Проблема решить другим способом

Я использовал React Date Picker

Это так легко реализовать. Просто установите пакет npm

npm install react-datepicker --save

Установить момент также

npm install moment --save

Импортировать библиотеки

import DatePicker from 'react-datepicker';
import moment from 'moment';
import 'react-datepicker/dist/react-datepicker.css';

В конструкторе

this.state = {
      dob: moment()
    };
    this.dateChange = this.dateChange.bind(this);

функция dateChange

dateChange(date) {
    this.setState({
      dob: date
    });
  }

И, наконец, функция рендеринга

 <DatePicker
     selected = {this.state.dob}
     onChange = {this.dateChange}
     className = "form-control"
    placeholder = "Date of Birth"
    maxDate = {new Date()}
    />

Здесь функция maxDate используется для отключения будущих дат.

maxDate = {new Date()}

Источник: https://www.npmjs.com/package/react-datepicker

Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
3
1
12 955
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Вы можете использовать атрибут min, max, чтобы ограничить выбор даты в пределах диапазона дат.

<div className = "form-group col-md-6">
     <label for = "inputDate4">Date of Birth</label>
     <input type = "date" className = "form-control" id = "inputDate4" placeholder = "Date of Birth" name = "dob" onChange = {this.handleChangeEvent} max = {moment().format("YYYY-MM-DD")}/>
</div>

Идеально! Это так просто. Большое спасибо.

Karan Patokar 16.04.2018 09:22

Рад, что помог

Shubham Khatri 16.04.2018 09:23
var input = new Date ("inputgotBackfromthe user")    
var now = new Date();
if (before < now) {
  // selected date is in the past
}

Вам нужно попробовать преобразовать ввод в объект даты, после чего вы можете создать новый объект даты и проверить, что объект даты ввода старше или нет. Помните, что это будет большой объем, потому что пользователи должны вводить его в правильном формате. В противном случае вы можете получить исключение или неправильный объект даты.

Спасибо, работает. Я также нашел другой способ, вместо использования простого поля ввода я использовал response-datepicker

Karan Patokar 16.04.2018 09:02

вы можете использовать библиотеку moment.js для работы с датой. Теперь для проверки будущей даты вы можете использовать функцию diffmoment.js.

                   // today < future (31/01/2014)
today.diff(future) // today - future < 0
future.diff(today) // future - today > 0

Следовательно, вы должны обеспечить регресс ваше состояние. Если вы хотите убедиться, что все в порядке, вы можете добавить к функции дополнительный параметр:

moment().diff(SpecialTo, 'days') // -8 (days)

Примечание:

это не сработает, если сейчас другой день, но разница меньше 24 часов

Я проверяю выбранную дату, сравнивая ее с текущей датой или точно с моментом (), который дает нам значение текущего времени, прошедшего в секундах с некоторой даты в 1970 году. Это не позволит выбрать какие-либо будущие даты.

handleDateChange(date){
    if (date <= moment()){
        this.setState({
            testDate: date
        });
    }
}

<DatePicker className = "form-control" dateFormat = "DD/MM/YYYY" id = "testDate onChange = {this.handleDateChange.bind(this)} onSelect = {this.handleSelect}                                                                selected = {this.state.testDate}/>

MaxDate сделал всю работу за меня. Попробуйте также использовать minDate для выбора минимальной даты.

import moment from 'moment';
import DatePicker from 'react-datepicker';

<DatePicker maxDate = {moment().toDate()} />

Другие вопросы по теме