Названия месяцев и дней недели

В Luxon локализация названий месяцев и дней недели строится вокруг двух уровней: текущей локали DateTime и специализированного API Info, которое возвращает справочные массивы. Поведение зависит от установленного языка, а также от формата представления даты (полное, сокращённое, узкое).

Каждый объект DateTime хранит локаль, которая влияет на все текстовые представления даты:

import { DateTime } from "luxon";

const dt = DateTime.local().setLocale("ru");

dt.monthLong;   // "май"
dt.weekdayLong; // "суббота"

Установка локали через setLocale() не изменяет сам момент времени, но полностью перестраивает текстовые поля, связанные с календарём.

Если локаль не задана явно, используется системная или дефолтная (en-US в большинстве окружений).


Названия месяцев через объект DateTime

Luxon предоставляет несколько уровней детализации названий месяца:

  • monthLong — полное название месяца
  • monthShort — сокращённое название
  • month — числовое значение месяца
const dt = DateTime.local(2026, 5, 23).setLocale("en");

dt.monthLong;  // "May"
dt.monthShort; // "May"
dt.month;      // 5

Для других локалей меняется именно строковое представление:

const dt = DateTime.local(2026, 5, 23).setLocale("ru");

dt.monthLong;  // "май"
dt.monthShort; // "май"

Особенность: в некоторых языках сокращённая и полная формы совпадают, поскольку система не всегда различает форматы по правилам языка.


Названия дней недели через объект DateTime

Аналогичная модель применяется к дням недели:

  • weekdayLong — полное название дня
  • weekdayShort — сокращённое
  • weekday — числовой индекс (1–7, ISO-8601)
const dt = DateTime.local(2026, 5, 23).setLocale("ru");

dt.weekdayLong;  // "суббота"
dt.weekdayShort; // "сб"
dt.weekday;      // 6

В англоязычной локали:

const dt = DateTime.local(2026, 5, 23).setLocale("en");

dt.weekdayLong;  // "Saturday"
dt.weekdayShort; // "Sat"

Важно, что числовая система дней недели соответствует ISO-стандарту, где понедельник имеет значение 1, а воскресенье — 7.


Получение массивов названий через Info

Модуль Info используется для получения справочных списков независимо от конкретной даты.

Месяцы

import { Info } from "luxon";

Info.months("long", { locale: "ru" });
// ["январь", "февраль", ..., "декабрь"]

Info.months("short", { locale: "en" });
// ["Jan", "Feb", ..., "Dec"]

Параметр формата определяет стиль:

  • "long" — полные названия
  • "short" — сокращённые
  • "narrow" — максимально короткие обозначения

Дни недели

Info.weekdays("long", { locale: "ru" });
// ["понедельник", "вторник", ..., "воскресенье"]

Info.weekdays("short", { locale: "en" });
// ["Mon", "Tue", ..., "Sun"]

Массивы возвращаются в порядке ISO (понедельник → воскресенье), что важно для построения календарных сеток и таблиц расписаний.


Форматирование дат через токены

Помимо свойств DateTime, Luxon поддерживает форматирование через строки-шаблоны, где названия месяцев и дней недели выводятся автоматически.

Месяцы

  • LLLL — полное название месяца
  • LLL — сокращённое название месяца
const dt = DateTime.local(2026, 5, 23).setLocale("ru");

dt.toFormat("LLLL"); // "май"
dt.toFormat("LLL");  // "май"

Дни недели

  • cccc — полное название дня недели
  • ccc — сокращённое название
dt.toFormat("cccc"); // "суббота"
dt.toFormat("ccc");  // "сб"

Форматирование через токены используется в ситуациях, где требуется комбинировать текстовые и числовые элементы:

dt.toFormat("cccc, d LLLL yyyy");
// "суббота, 23 май 2026"

Сопоставление локали и календарных форм

Разные локали не только переводят слова, но и изменяют правила отображения:

  • порядок слов в дате может меняться
  • сокращения могут быть неоднозначными
  • формы месяцев могут отличаться в падежах (в языках с грамматическими склонениями)

Пример:

DateTime.local(2026, 1, 1).setLocale("ru").toFormat("d LLLL yyyy");
// "1 января 2026"

DateTime.local(2026, 1, 1).setLocale("en").toFormat("d LLLL yyyy");
// "1 January 2026"

Низкоуровневое поведение и ограничения локализации

Система локализации в Luxon опирается на ICU-данные, поэтому:

  • набор локалей зависит от окружения (Node.js или браузер)
  • нестандартные локали могут деградировать до en
  • форматирование всегда привязано к ICU-правилам, а не к пользовательским словарям

При этом числовые значения (month, weekday) остаются неизменными вне зависимости от локали, что обеспечивает стабильность при вычислениях и сортировках.


Использование в табличных и календарных структурах

Названия месяцев и дней недели чаще всего применяются в интерфейсных структурах:

const days = Info.weekdays("short", { locale: "ru" });
const months = Info.months("short", { locale: "ru" });

Такие массивы используются для:

  • построения календарных сеток
  • отображения заголовков таблиц расписаний
  • локализованных графиков и таймлайнов

При этом DateTime остаётся источником конкретного момента времени, а Info — источником справочных подписей календаря.