Локаль для конкретного объекта

Moment.js предоставляет возможность работы с датами и временем с учётом локализации, что позволяет отображать дату, время и форматирование в соответствии с правилами конкретного языка или региона. Локаль может задаваться глобально для всего приложения или локально для отдельного объекта даты. Рассмотрим второй подход — локаль для конкретного объекта.

Установка локали для отдельного объекта

Для установки локали у конкретного объекта Moment используется метод .locale(). Синтаксис метода следующий:

moment().locale(String);
moment().locale(String, Object);
  • String — код локали, например 'ru' для русского, 'en' для английского.
  • Object — необязательный объект с пользовательскими настройками локали, который может переопределять стандартные форматы.

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

const date = moment();
date.locale('ru');
console.log(date.format('LLLL')); // "четверг, 21 мая 2026 г. 12:34"

В этом примере локаль 'ru' применяется только к объекту date. Глобальная локаль остаётся без изменений.

Использование пользовательских локалей

Можно создавать пользовательские локали для отдельных объектов с помощью второго аргумента метода .locale():

const customLocale = {
    months : 'Январь_Февраль_Март_Апрель_Май_Июнь_Июль_Август_Сентябрь_Октябрь_Ноябрь_Декабрь'.split('_'),
    monthsShort : 'Янв_Фев_Мар_Апр_Май_Июн_Июл_Авг_Сен_Окт_Ноя_Дек'.split('_'),
    weekdays : 'Воскресенье_Понедельник_Вторник_Среда_Четверг_Пятница_Суббота'.split('_'),
    weekdaysShort : 'Вс_Пн_Вт_Ср_Чт_Пт_Сб'.split('_'),
    longDateFormat : {
        LLLL : 'dddd, D MMMM YYYY г., HH:mm'
    }
};

const date = moment();
date.locale('custom', customLocale);
console.log(date.format('LLLL')); // "четверг, 21 мая 2026 г., 12:34"

Таким образом, можно создавать локали с любыми индивидуальными настройками, не затрагивая глобальные настройки.

Переопределение локали только на один вызов

Для случаев, когда необходимо применить локаль только для конкретного форматирования, Moment.js позволяет использовать цепочку методов:

const date = moment();
console.log(date.locale('ru').format('LLLL')); // вывод на русском
console.log(date.format('LLLL')); // вывод в глобальной локали

В этом примере локаль 'ru' применяется только к одному вызову format(). Глобальная локаль объекта не изменяется.

Работа с несколькими локалями одновременно

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

const date1 = moment();
const date2 = moment();

date1.locale('ru');
date2.locale('en');

console.log(date1.format('LLLL')); // "четверг, 21 мая 2026 г. 12:34"
console.log(date2.format('LLLL')); // "Thursday, May 21, 2026 12:34"

Это позволяет одновременно использовать разные локали для разных дат в одном приложении.

Проверка текущей локали объекта

Чтобы узнать, какая локаль установлена у конкретного объекта, используется метод .locale() без аргументов:

const date = moment().locale('ru');
console.log(date.locale()); // "ru"

Метод возвращает строку с кодом текущей локали объекта.

Важные особенности

  1. Локаль объекта не меняет глобальную локаль. Глобальная локаль остаётся такой, какой она была установлена через moment.locale().
  2. Пользовательские локали применяются только к объекту, которому они присвоены. Другие объекты, даже созданные после, используют глобальную локаль или свои собственные локальные настройки.
  3. Переопределение форматов локали на объекте удобно для временного изменения отображения дат в интерфейсе, не влияя на другие элементы приложения.

Примеры полезных комбинаций

Форматирование с учётом локали и относительных дат:

const date = moment().locale('ru');
console.log(date.fromNow()); // "несколько секунд назад"

Использование локали для календарного отображения:

const date = moment().locale('ru');
console.log(date.calendar()); // "Сегодня в 12:34"

Переход между локалями на одном объекте:

const date = moment();
date.locale('en');
console.log(date.format('LLLL')); // Thursday, May 21, 2026 12:34
date.locale('ru');
console.log(date.format('LLLL')); // четверг, 21 мая 2026 г. 12:34

Метод .locale() обеспечивает гибкость в работе с датами, позволяя задавать индивидуальные локали для каждого объекта, создавать кастомные локали и динамически изменять их на лету. Это особенно полезно для приложений с мультиязычным интерфейсом, где разные пользователи или компоненты могут требовать разных настроек отображения даты и времени.