В библиотеке MUI работа с датами тесно связана с компонентами выбора
даты, такими как DatePicker, DateTimePicker и
LocalizationProvider. Правильная локализация позволяет
пользователям видеть даты и времена в привычном формате и с корректными
переводами дней недели и месяцев.
Компонент LocalizationProvider является ключевым для
настройки локализации. Он оборачивает компоненты выбора даты и передает
им необходимые настройки локали и библиотеку работы с датами.
Пример базового использования:
import { LocalizationProvider } from '@mui/x-date-pickers';
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
import ruLocale from 'date-fns/locale/ru';
<LocalizationProvider dateAdapter={AdapterDateFns} locale={ruLocale}>
<DatePicker label="Выберите дату" value={selectedDate} onCha nge={handleDateChange} />
</LocalizationProvider>
Ключевые моменты:
dateAdapter определяет, какая библиотека для работы с
датами будет использоваться. MUI поддерживает date-fns,
dayjs, luxon и moment.locale задает локаль для форматирования дат. Для
date-fns это объект локали, импортируемый из пакета
date-fns/locale.Помимо языковых особенностей, локаль влияет на формат даты. Например,
в русском формате чаще используется dd.MM.yyyy, тогда как в
американском — MM/dd/yyyy. MUI автоматически подхватывает
формат из переданной локали. При необходимости можно задавать
собственный формат:
<DatePicker
label="Выберите дату"
value={selectedDate}
onCha nge={handleDateChange}
inputFormat="dd.MM.yyyy"
/>
Совет: всегда задавать inputFormat,
если требуется строгий контроль над отображением даты, так как разные
локали могут по-разному интерпретировать ввод пользователя.
Компоненты выбора даты отображают дни недели, месяцы и кнопки
навигации. Эти тексты берутся из локали, переданной в
LocalizationProvider. Для расширенной настройки можно
использовать componentsProps:
<DatePicker
componentsProps={{
actionBar: {
actions: ['clear', 'cancel', 'accept']
}
}}
/>
Также можно переопределить подписи месяцев и дней через
adapter при необходимости, но в большинстве случаев
встроенные локали покрывают стандартные требования.
MUI поддерживает несколько адаптеров для работы с датами:
localeData.Выбор адаптера влияет на синтаксис локализации и поддержку форматов.
Например, dayjs требует явного вызова метода
.locale('ru') для установки локали.
Для отображения даты и времени в нужной временной зоне MUI не
управляет этим напрямую — это задача адаптера и библиотеки для работы с
датами. Например, для Luxon можно использовать
DateTime.local().setZone('Europe/Moscow') и передавать
результат в DatePicker.
MUI позволяет задавать кастомные форматы отображения через объект
formats:
<LocalizationProvider
dateAdapter={AdapterDateFns}
locale={ruLocale}
adapterLocale={ruLocale}
dateFormats={{
keyboardDate: 'dd.MM.yyyy',
monthAndYear: 'MMMM yyyy',
}}
>
<DatePicker label="Дата" />
</LocalizationProvider>
Это особенно полезно, когда требуется единообразие форматов по всему приложению, независимо от настроек локали по умолчанию.
LocalizationProvider для обертки
компонентов выбора даты.date-fns с импортом
ru из date-fns/locale.inputFormat и dateFormats, чтобы
избежать неоднозначного отображения.Эти практики обеспечивают корректное отображение дат и времени, улучшая пользовательский опыт в приложениях на React с использованием MUI.