date-fns реализует локализацию через набор предустановленных объектов локалей, каждый из которых содержит правила форматирования дат, склонения, месяцы, дни недели и правила построения относительных выражений времени.
Русская локализация представлена модулем ru, который
включает:
Локаль импортируется отдельно от основного функционала библиотеки:
import { format } from 'date-fns'
import { ru } from 'date-fns/locale'
Использование локали происходит через опцию locale в
функциях форматирования:
format(new Date(2026, 0, 24), 'd MMMM yyyy', { locale: ru })
// 24 января 2026
Ключевым моментом является то, что локаль не активируется глобально автоматически. Каждое использование требует явной передачи, если не задана дефолтная конфигурация.
Русская локаль влияет на поведение токенов date-fns,
особенно тех, которые связаны с текстовыми представлениями дат.
format(new Date(2026, 4, 22), 'EEEE', { locale: ru })
// пятница
format(new Date(2026, 4, 22), 'MMMM', { locale: ru })
// май
Важная особенность: в русском языке названия месяцев в формате по умолчанию возвращаются в именительном или родительном падеже в зависимости от контекста формата.
format(new Date(2026, 0, 1), 'd MMMM', { locale: ru })
// 1 января
Русская локализация учитывает сложные правила склонения:
Эти правила используются в функциях:
formatDistanceformatDistanceStrictФункция formatDistance формирует человекочитаемые
выражения времени:
import { formatDistance } from 'date-fns'
import { ru } from 'date-fns/locale'
formatDistance(new Date(2026, 4, 22), new Date(2026, 4, 20), { locale: ru })
// "2 дня назад"
При изменении направления вычисления:
formatDistance(new Date(2026, 4, 20), new Date(2026, 4, 22), { locale: ru })
// "через 2 дня"
import { formatDistanceStrict } from 'date-fns'
formatDistanceStrict(new Date(2026, 4, 22), new Date(2026, 4, 20), { locale: ru })
// "2 дня"
Функция formatRelative позволяет выводить даты
относительно текущего дня.
import { formatRelative } from 'date-fns'
formatRelative(new Date(2026, 4, 22), new Date(2026, 4, 21), { locale: ru })
// "сегодня в 00:00"
Локаль управляет не только словами, но и структурой фраз, включая порядок компонентов времени и предлоги.
При использовании parse локаль влияет на разбор
текстовых представлений:
import { parse } from 'date-fns'
parse('24 января 2026', 'd MMMM yyyy', new Date(), { locale: ru })
Здесь критично совпадение:
Несовпадение локали приводит к невозможности корректного разбора строки.
Для уменьшения дублирования параметров используется
setDefaultOptions:
import { setDefaultOptions } from 'date-fns'
import { ru } from 'date-fns/locale'
setDefaultOptions({ locale: ru })
После этого все функции используют русскую локаль по умолчанию:
format(new Date(2026, 4, 22), 'd MMMM yyyy')
// 22 мая 2026
Особенность механизма:
date-fns;Intl.DateTimeFormat.В зависимости от шаблона форматирования месяц может менять форму:
Это определяется контекстом токена MMMM и окружающих
символов формата.
Внутри локали реализованы правила:
Эти правила применяются автоматически в функциях расстояния.
Русская локаль поддерживает как 24-часовой, так и 12-часовой формат, но по умолчанию ориентирована на 24-часовую систему:
format(new Date(), 'HH:mm', { locale: ru })
Локаль применяется независимо от сложности шаблона:
format(new Date(2026, 4, 22, 18, 45), 'EEEE, d MMMM yyyy, HH:mm', { locale: ru })
// пятница, 22 мая 2026, 18:45
Русская локаль импортируется отдельно, что позволяет сборщику исключать ненужные локали из бандла.
import { ru } from 'date-fns/locale'
Неиспользование локали в коде приводит к её исключению при оптимизации сборки.
Локаль не управляет временными зонами. Она отвечает только за:
Для работы с временными зонами используется отдельный модуль:
date-fns-tzЭто разделение принципиально: локаль не изменяет фактическое значение времени, только его представление.
format(date, 'd MMMM')
// вывод на английском при дефолтной локали
parse('24 май 2026', 'd MMMM yyyy', new Date(), { locale: ru })
// ошибка из-за падежа или формы
Без setDefaultOptions библиотека не изменяет поведение
автоматически.
Ключевые токены и их влияние:
MMMM — полное название месяца с падежной
адаптациейMMM — сокращённое название месяцаEEEE — полное название дня неделиeee — сокращённое название дня неделиdo — порядковое числительное с суффиксомformat(new Date(2026, 4, 22), 'do MMMM', { locale: ru })
// 22-е мая