Как я могу добавить диапазон дат с помощью одного ввода в react-datepicker

#javascript #reactjs #react-datepicker

#javascript #reactjs #react-datepicker

Вопрос:

Я хочу создать компонент диапазона дат, который будет умещать как начальную, так и конечную даты в один ввод. Я попытался использовать пример здесь https://reactdatepicker.com/#example-date-range-for-one-datepicker но, похоже, он не отображает конечную дату. Я настроил пользовательский ввод для отображения обоих значений, но я не знаю, как обновить их оба с помощью одного параметра onChange в моем DatePicker. Я считаю, что это привело к сбою компонента с ошибкой RangeError: недопустимое значение времени.

 const CustomDatePicker = (props) => {
  const {
    className,
    startDateId,
    endDateId,
    startLabel,
    endLabel,
    displayFormat,
    onStartDateChange,
    onEndDateChange,
    locale,
    startDate,
    endDate,
  } = props

const CustomInput = ({ value, onClick}) => {
    return 
     
        <input
          className="my-input"
          type="text"
          onClick={onClick}
          value={`${startDate} - ${endDate}`}
        />
      </div>
   
    )

return <DatePicker
            id={startDateId}
            selected={startDate}
            selectsRange
            startDate={startDate}
            endDate={endDate}
            placeholderText={placeholder}
            dateFormat={displayFormat}
            onChange={onStartDateChange}
            locale={selectLocale(locale)}
            customInput={<CustomInput />}
          />
}
 

Ответ №1:

Если вы перейдете на веб-сайт, на который вы ссылались, вы увидите, что при изменении ввода он изменяет как начальную, так и конечную дату. Таким образом, вы можете обновлять их оба. Итак, это будет выглядеть так:

JSX:

           <DatePicker
            id={startDateId}
            selected={startDate}
            selectsRange
            startDate={startDate}
            endDate={endDate}
            placeholderText={placeholder}
            dateFormat={displayFormat}
            onChange={onChange}
            locale={selectLocale(locale)}
            customInput={<CustomInput />}
          />
         
         <input value={`${startDate} - ${endDate}`} />
 

Функция:

 const onChange = dates => {
    const [start, end] = dates;
    setStartDate(start);
    setEndDate(end);
}
 

Комментарии:

1. Ах, хорошо, это имеет смысл, спасибо! Что мне нужно сделать с форматированием? StartDate и EndDate неправильно отформатированы, и если я укажу значение prop, оно вернет только форматированную начальную дату.

2. Вам придется либо форматировать данные при их использовании, либо сохранять копию, которая будет иметь форматированную версию. Вот несколько хороших способов форматирования ваших дат: flaviocopes.com/how-to-format-date-javascript