DateTimePicker из библиотеки MUI (Material-UI)
предоставляет компонент для выбора даты и времени в едином элементе
управления. Он объединяет функциональность DatePicker и
TimePicker, позволяя пользователю выбирать как
конкретную дату, так и точное время в одном интерфейсе. Для его
использования необходимо подключить пакет
@mui/x-date-pickers/DateTimePicker и соответствующие
адаптеры для работы с библиотеками управления датами, такими как
date-fns, dayjs,
luxon или moment.
Пример базового подключения с использованием dayjs:
import * as React from 'react';
import TextField from '@mui/material/TextField';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import dayjs from 'dayjs';
export default function BasicDateTimePicker() {
const [value, setValue] = React.useState(dayjs());
return (
<LocalizationProvider dateAdapter={AdapterDayjs}>
<DateTimePicker
label="Выберите дату и время"
value={value}
onCha nge={(newValue) => setValue(newValue)}
renderInput={(params) => <TextField {...params} />}
/>
</LocalizationProvider>
);
}
В этом примере ключевым моментом является обёртка LocalizationProvider, которая позволяет компоненту корректно обрабатывать локализацию и форматирование даты/времени.
DateTimePicker поддерживает различные форматы
отображения даты и времени через свойство inputFormat. Оно
определяет, как будет отображаться выбранное значение в текстовом поле.
Примеры популярных форматов:
<DateTimePicker
label="Дата и время"
value={value}
onCha nge={(newValue) => setValue(newValue)}
inputFormat="DD.MM.YYYY HH:mm"
/>
DD.MM.YYYY HH:mm — 31.12.2026 14:30YYYY/MM/DD hh:mm A — 2026/12/31 02:30 PMДополнительно можно использовать mask для ограничения
ввода через клавиатуру:
<DateTimePicker
label="Дата и время"
value={value}
onCha nge={(newValue) => setValue(newValue)}
inputFormat="DD/MM/YYYY HH:mm"
mask="__/__/____ __:__"
/>
DateTimePicker позволяет задавать ограничения на выбор времени:
minTime и maxTime — ограничивают выбор
времени в пределах определённых часов и минут.minutesStep — задаёт шаг изменения минут при прокрутке
или ручном вводе.Пример:
<DateTimePicker
label="Рабочие часы"
value={value}
onCha nge={(newValue) => setValue(newValue)}
minTime={dayjs().hour(9).minute(0)}
maxTime={dayjs().hour(18).minute(0)}
minutesStep={15}
/>
Здесь пользователь сможет выбрать время только в пределах с 09:00 до 18:00 с шагом 15 минут.
Для управления диапазоном доступных дат используются свойства:
minDate и maxDate — задают минимальную и
максимальную допустимую дату.disablePast — запрещает выбор прошлых дат.disableFuture — запрещает выбор будущих дат.Пример использования:
<DateTimePicker
label="Срок события"
value={value}
onCha nge={(newValue) => setValue(newValue)}
minDate={dayjs()}
maxDate={dayjs().add(1, 'month')}
disablePast
/>
Этот подход часто используется для планирования событий или бронирования, где нельзя выбрать дату вне допустимого диапазона.
DateTimePicker легко интегрируется с библиотеками
управления формами, например, Formik или React
Hook Form. Главное — использовать onChange для
обновления состояния формы.
Пример с Formik:
import { useFormik } from 'formik';
const formik = useFormik({
initialValues: { datetime: dayjs() },
onSubmit: (values) => console.log(values),
});
<DateTimePicker
label="Дата и время события"
value={formik.values.datetime}
onCha nge={(newValue) => formik.setFieldValue('datetime', newValue)}
renderInput={(params) => <TextField {...params} />}
/>
MUI позволяет кастомизировать визуальное оформление DateTimePicker:
renderInput — можно полностью заменить текстовое поле
на кастомный компонент.sx — применять стили через систему MUI.slotProps — детальная настройка элементов интерфейса,
например кнопок или календаря.Пример с кастомной кнопкой очистки:
<DateTimePicker
label="Дата и время"
value={value}
onCha nge={(newValue) => setValue(newValue)}
slotProps={{
clearButton: {
sx: { color: 'red', fontWeight: 'bold' },
onClick: () => setValue(null),
},
}}
/>
Для поддержки разных языков MUI использует объект локализации в
LocalizationProvider. Пример для русского языка:
import { ruRU } from '@mui/x-date-pickers/locales';
<LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale="ru" localeText={ruRU.components.MuiLocalizationProvider.defaultProps.localeText}>
<DateTimePicker
label="Выберите дату и время"
value={value}
onCha nge={(newValue) => setValue(newValue)}
renderInput={(params) => <TextField {...params} />}
/>
</LocalizationProvider>
Это гарантирует правильное отображение названий месяцев, дней недели и формата даты.
DateTimePicker предоставляет события для контроля и валидации:
onAccept — вызывается при подтверждении выбора.onError — позволяет отследить ошибки формата или
недопустимой даты.onClose — срабатывает при закрытии календаря или
всплывающего окна выбора времени.Пример:
<DateTimePicker
label="Дата и время"
value={value}
onCha nge={(newValue) => setValue(newValue)}
onAcc ept={(selected) => console.log('Выбрано:', selected)}
onEr ror={(error) => console.error('Ошибка:', error)}
/>
renderInput,
sx и slotProps.DateTimePicker является мощным инструментом для управления временем в интерфейсах, обеспечивая гибкость и удобство как для разработчиков, так и для пользователей.