В FormatJS форматирование дат строится поверх стандарта
Intl.DateTimeFormat, где базовая идея заключается в
абстракции уровней детализации представления даты. Ключевыми
предустановками являются четыре стиля: короткий, средний, длинный и
полный. Они определяют не только набор отображаемых компонентов (день,
месяц, год, время), но и степень формальности, а также локализацию
текстовых элементов.
В основе работы лежит сопоставление параметра dateStyle
с внутренними настройками Intl.DateTimeFormat. При
использовании react-intl или низкоуровневого API FormatJS
разработчик фактически выбирает один из предопределённых уровней
детализации, делегируя остальную работу движку интернационализации
браузера или полифила.
Каждый стиль представляет собой семантический контракт, а не фиксированный шаблон. Это означает, что итоговое отображение зависит от локали:
Короткий формат ориентирован на максимальную компактность. Он используется в интерфейсах с высокой плотностью информации: списки, таблицы, уведомления.
Типичная конфигурация:
new Intl.DateTimeFormat('en-US', { dateStyle: 'short' })
Примеры вывода:
12/31/2026 (en-US)31.12.2026 (de-DE)31/12/2026 (en-GB)Особенности:
В react-intl:
<FormattedDate value={date} dateStyle="short" />
Средний формат балансирует между читаемостью и компактностью. Он часто используется как стандарт по умолчанию в интерфейсах приложений.
Пример конфигурации:
new Intl.DateTimeFormat('en-US', { dateStyle: 'medium' })
Примеры вывода:
Dec 31, 202631 Dec 20262026年12月31日 (ja-JP)Особенности:
Использование в FormatJS:
<FormattedDate value={date} dateStyle="medium" />
Средний формат часто становится компромиссом между UI-ограничениями и человеческим восприятием.
Длинный формат вводит полные текстовые названия месяцев и более формальную структуру. Он используется в документах, отчётах и интерфейсах, где важна ясность и однозначность.
Конфигурация:
new Intl.DateTimeFormat('en-US', { dateStyle: 'long' })
Примеры:
December 31, 202631 December 202631 décembre 2026 (fr-FR)Особенности:
FormatJS:
<FormattedDate value={date} dateStyle="long" />
Длинный формат снижает когнитивную нагрузку при чтении сложных документов, где важна точность восприятия даты без контекста интерфейса.
Полный формат включает максимально детализированное представление даты с добавлением дня недели. Он используется в календарях, расписаниях, событиях и интерфейсах, где важна контекстуализация времени.
Конфигурация:
new Intl.DateTimeFormat('en-US', { dateStyle: 'full' })
Примеры:
Thursday, December 31, 2026Donnerstag, 31. Dezember 2026четверг, 31 декабря 2026 г.Особенности:
FormatJS:
<FormattedDate value={date} dateStyle="full" />
Полный формат часто используется в представлении событий календарного типа, где день недели имеет функциональное значение.
Различие между стилями определяется не только количеством символов, но и уровнем информации:
Эти уровни формируют градацию от машинного представления к человеческому восприятию.
FormatJS не фиксирует шаблоны, а делегирует форматирование локали. Один и тот же стиль может радикально отличаться:
| Локаль | short | medium | long | full |
|---|---|---|---|---|
| en-US | 12/31/2026 | Dec 31, 2026 | December 31, 2026 | Thursday, December 31, 2026 |
| de-DE | 31.12.2026 | 31. Dez. 2026 | 31. Dezember 2026 | Donnerstag, 31. Dezember 2026 |
| ja-JP | 2026/12/31 | 2026/12/31 | 2026年12月31日 | 2026年12月31日木曜日 |
Таким образом, стили задают уровень детализации, но не формат строки.
В реальных приложениях стили часто комбинируются с временными параметрами:
new Intl.DateTimeFormat('en-US', {
dateStyle: 'long',
timeStyle: 'short'
})
Это позволяет строить гибридные представления вроде:
December 31, 2026 at 5:30 PMFormatJS сохраняет консистентность этих комбинаций через единый API
react-intl:
<FormattedDate
value={date}
dateStyle="full"
timeStyle="short"
/>
Поведение стилей зависит от реализации Intl:
Это влияет на:
Каждый стиль следует рассматривать как уровень абстракции:
Такое разделение позволяет унифицировать UX без ручного управления строковыми шаблонами, делегируя форматирование международным стандартам ICU и API FormatJS.