Настройка названий месяцев и дней недели

Moment.js предоставляет мощный инструмент для работы с датами и временем, включая возможность локализации и настройки отображения названий месяцев и дней недели. Это особенно важно для приложений, ориентированных на международную аудиторию, где стандартные английские названия необходимо адаптировать под нужный язык или стиль отображения.


Локализация и установка языка

Для того чтобы изменить язык отображения, используется метод moment.locale(). Он задает локаль, которая влияет на форматирование дат, включая названия месяцев и дней недели.

moment.locale('ru'); // Устанавливаем русскую локаль
console.log(moment().format('LLLL')); // Пятница, 21 мая 2026 г., 10:30

Важно: локаль должна быть доступна в Moment.js. По умолчанию в стандартной сборке включены многие языки, включая русский. Если локаль отсутствует, необходимо подключить соответствующий файл локализации.


Настройка месяцев

Moment.js использует массивы для хранения полных и сокращённых названий месяцев. Для русской локали это массивы months и monthsShort.

moment.updateLocale('ru', {
    months: [
        'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
        'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
    ],
    monthsShort: [
        'Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн',
        'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'
    ]
});

После обновления локали все вызовы форматирования дат будут использовать новые значения:

console.log(moment('2026-05-21').format('MMMM')); // Май
console.log(moment('2026-05-21').format('MMM'));  // Май

Особенность: формат MMMM выводит полное название месяца, MMM — сокращенное.


Настройка дней недели

Дни недели также хранятся в массивах weekdays, weekdaysShort и weekdaysMin. Эти массивы позволяют контролировать полные, сокращенные и минимальные варианты отображения.

moment.updateLocale('ru', {
    weekdays: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],
    weekdaysShort: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
    weekdaysMin: ['В', 'П', 'В', 'С', 'Ч', 'П', 'С']
});

Пример использования:

console.log(moment().format('dddd')); // Пятница
console.log(moment().format('ddd'));  // Пт
console.log(moment().format('dd'));   // П

Примечание: dddd — полное название дня недели, ddd — сокращенное, dd — минимальное (обычно одна-две буквы).


Настройка первой недели и первого дня года

В некоторых странах неделя начинается с понедельника, в других — с воскресенья. Moment.js позволяет задавать первый день недели через свойство week.dow и первый день года через week.doy.

moment.updateLocale('ru', {
    week: {
        dow: 1, // Понедельник
        doy: 4  // Неделя, содержащая 4 января, считается первой
    }
});

Эти настройки влияют на методы week() и isoWeek(), определяя расчёт недельного номера для любой даты.


Динамическая настройка через функцию

Возможна также более гибкая настройка локали через функции, возвращающие строки на основе условий. Это полезно, если требуется изменять названия месяцев или дней в зависимости от контекста.

moment.updateLocale('ru', {
    months: function (momentInstance) {
        const months = [
            'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
            'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
        ];
        return months[momentInstance.month()];
    }
});

Такой подход обеспечивает возможность создания динамических локализаций, например, с учётом падежей или специфических форматов.


Советы по использованию

  • Обновление локали без перезаписи других настроек: updateLocale сохраняет существующие параметры, заменяя только указанные. Это удобно для локализации отдельных элементов без полной переинициализации.
  • Использование форматов для интернационализации: предпочтительнее использовать MMMM, ddd и dddd вместо ручного написания названий месяцев и дней.
  • Тестирование отображения: всегда проверять корректность названий после изменения локали, особенно если используются сокращённые или минимальные формы.

Настройка названий месяцев и дней недели в Moment.js позволяет создавать локализованные интерфейсы с высокой точностью, поддерживая как статические, так и динамические формы. Гибкость updateLocale обеспечивает контроль над полными, сокращёнными и минимальными формами, а также над первым днём недели и года, что критично для международных приложений.