Moment.js предоставляет мощные возможности для работы с датами и временем, включая поддержку локалей. Локали позволяют адаптировать отображение дат, месяцев, дней недели и форматов времени под конкретный язык и регион. Создание пользовательской локали особенно важно для приложений, ориентированных на специфические аудитории или нестандартные форматы отображения времени.
Для создания новой локали используется метод
moment.defineLocale(name, config). Здесь:
name — строка, идентификатор локали, например
'ru-custom'.config — объект с параметрами локали, включающий
форматы дат, имена месяцев, дней недели и другие настройки.Пример базового определения локали:
moment.defineLocale('ru-custom', {
months: 'Январь_Февраль_Март_Апрель_Май_Июнь_Июль_Август_Сентябрь_Октябрь_Ноябрь_Декабрь'.split('_'),
monthsShort: 'Янв_Фев_Мар_Апр_Май_Июн_Июл_Авг_Сен_Окт_Ноя_Дек'.split('_'),
weekdays: 'Воскресенье_Понедельник_Вторник_Среда_Четверг_Пятница_Суббота'.split('_'),
weekdaysShort: 'Вс_Пн_Вт_Ср_Чт_Пт_Сб'.split('_'),
weekdaysMin: 'Вс_Пн_Вт_Ср_Чт_Пт_Сб'.split('_'),
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD.MM.YYYY',
LL: 'D MMMM YYYY г.',
LLL: 'D MMMM YYYY г., HH:mm',
LLLL: 'dddd, D MMMM YYYY г., HH:mm'
},
calendar: {
sameDay: '[Сегодня в] LT',
nextDay: '[Завтра в] LT',
nextWeek: 'dddd [в] LT',
lastDay: '[Вчера в] LT',
lastWeek: '[Прошлый] dddd [в] LT',
sameElse: 'L'
},
relativeTime: {
future: 'через %s',
past: '%s назад',
s: 'несколько секунд',
m: 'минута',
mm: '%d минут',
h: 'час',
hh: '%d часов',
d: 'день',
dd: '%d дней',
M: 'месяц',
MM: '%d месяцев',
y: 'год',
yy: '%d лет'
},
week: {
dow: 1, // Первый день недели — понедельник
doy: 7 // Первая неделя года должна содержать 7 января
}
});
В этом примере локаль 'ru-custom' полностью настраивает
названия месяцев, дней недели, форматы отображения дат и правила
относительного времени.
Объект longDateFormat определяет, как Moment.js будет
выводить дату в различных сценариях:
LT — время без секунд.LTS — время с секундами.L — краткий формат даты.LL — полный формат даты с месяцем прописью.LLL — полный формат даты с временем.LLLL — полная дата с днем недели и временем.Пример использования:
moment.locale('ru-custom');
console.log(moment().format('LLLL')); // Воскресенье, 21 мая 2026 г., 14:35
Объект calendar позволяет задать шаблоны для вывода дат
относительно текущего дня. Например:
sameDay — для сегодняшней даты.nextDay — для завтрашней.nextWeek — для следующей недели.lastDay — для вчерашней.lastWeek — для прошлой недели.sameElse — для всех остальных случаев.Каждое значение может содержать текст и формат времени через
LT.
Объект relativeTime используется при вызове
moment().fromNow() или moment().to().
Возможные ключи:
future и past — шаблоны для будущего и
прошлого.s, m, mm, h,
hh, d, dd, M,
MM, y, yy — единицы измерения
времени.Пример:
moment.locale('ru-custom');
console.log(moment().add(3, 'days').fromNow()); // через 3 дня
console.log(moment().subtract(2, 'hours').fromNow()); // 2 часов назад
Объект week задает поведение календаря:
dow (day of week) — первый день недели (0 —
воскресенье, 1 — понедельник и т.д.).doy (day of year) — день года, который определяет
первую неделю года. Обычно 4 соответствует ISO-8601, но можно изменять
под региональные стандарты.После определения локали её нужно активировать:
moment.locale('ru-custom');
После этого все операции с датами будут использовать новую локаль, включая форматирование, календарные шаблоны и относительное время.
Moment.js позволяет создавать локали на основе существующих, чтобы
избежать повторного задания всех настроек. Для этого используется
moment.defineLocale с указанием родительской локали через
parentLocale:
moment.defineLocale('ru-custom-short', {
parentLocale: 'ru-custom',
longDateFormat: {
LLLL: 'D MMM YYYY, HH:mm'
}
});
Таким образом, новая локаль наследует все остальные настройки, изменяя только указанные поля.
_ и превращать в массив методом
split('_').LT, LTS и т.д. должны
соответствовать стандарту Moment.js.moment().locale('ru-custom'), не меняя глобальную
локаль.months и relativeTime.Создание пользовательской локали в Moment.js позволяет полностью контролировать отображение даты и времени, обеспечивая гибкость и точность для любых языковых и региональных требований.