#javascript #reactjs #material-ui
#javascript #reactjs #материал-пользовательский интерфейс
Вопрос:
Я пытаюсь создать диалоговое окно для пользователя, чтобы указать начальную и конечную дату / время с помощью React и Material UI. Я хотел бы установить по умолчанию значение start до начала текущего дня и end до конца текущего дня (UTC), но я даже не могу понять, как получить дату и время по умолчанию для отображения.
У меня есть начало и конец в таком состоянии:
state = {
start: new Date(),
end: new Date()
};
и тогда у меня есть поля в методе рендеринга:
<TextField
type="datetime-local"
label="Start Date/Time"
InputLabelProps={{
shrink: true
}}
required={true}
// TODO make it start of today
defaultValue={this.state.start.toUTCString()}
onChange={this.handleStartChange}
/>
<TextField
type="datetime-local"
label="End Date/Time"
InputLabelProps={{
shrink: true
}}
required={true}
value={this.state.end.toString()}
// TODO make it end of today
onChange={this.handleEndChange}
/>
но когда я открываю диалоговое окно, в текстовых полях mm/dd/yyyy --:-- --
вместо текущей даты / времени устанавливается состояние. Я пробовал как toUTCString, так и toString, чтобы указать дату, используя defaultValue или value, но ничего не работает…
Я бы хотел, чтобы текущая дата UTC отображалась в текстовых полях.
Комментарии:
1. Пользовательский интерфейс Material не включает средства выбора даты / времени из поля, текстовое поле по умолчанию соответствует базовому вводу HTML 5. Используйте что-то вроде этого , если вы хотите согласованного поведения на всех платформах.
2. @JaredSmith спасибо — это выглядит интересно!!! Я новичок во всем этом, поэтому потребуется некоторое время, чтобы разобраться в moment, date-fns, luxon и dayjs, чтобы использовать его. но это было бы лучше, чем то, что я сейчас делаю, наверняка.
Ответ №1:
это то, что у меня получилось:
<TextField
style={{ margin: 0, width: '200px' }}
label="Start Date/Time (UTC)"
type="datetime-local"
defaultValue={this.state.start
.toISOString()
.slice(0, 16)}
InputLabelProps={{
shrink: true
}}
required={true}
onChange={this.handleStartChange}
/>
<TextField
style={{ margin: 0, width: '200px' }}
label="End Date/Time (UTC)"
type="datetime-local"
defaultValue={this.state.end
.toISOString()
.slice(0, 16)}
InputLabelProps={{
shrink: true
}}
required={true}
onChange={this.handleEndChange}
/>