Метод Info.months

Метод Info.months в библиотеке Luxon предназначен для получения массива названий месяцев с учётом локали, формата отображения и особенностей календарной системы. Он относится к статическому объекту Info, который предоставляет справочные данные о датах и времени, не зависящие от конкретного момента.

Основная задача метода — стандартизированное получение списка месяцев для интерфейсов, генераторов дат, календарных компонентов и любых систем, где требуется локализованное отображение временных единиц.


Сигнатура метода

Info.months(format?, options?)
  • format — строка, определяющая стиль названий месяцев
  • options — объект конфигурации локализации и системы нумерации

Возвращаемое значение — массив строк из 12 элементов, соответствующих месяцам от января до декабря в заданной локали.


Форматы отображения месяцев

Метод поддерживает несколько стандартных форматов:

  • "long" — полные названия месяцев
  • "short" — сокращённые формы
  • "narrow" — минимальные обозначения (обычно одна-две буквы)

Пример поведения форматов

Info.months("long")

Результат:

[
  "January", "February", "March", "April",
  "May", "June", "July", "August",
  "September", "October", "November", "December"
]
Info.months("short")
[
  "Jan", "Feb", "Mar", "Apr",
  "May", "Jun", "Jul", "Aug",
  "Sep", "Oct", "Nov", "Dec"
]
Info.months("narrow")
[
  "J", "F", "M", "A",
  "M", "J", "J", "A",
  "S", "O", "N", "D"
]

Локализация и влияние locale

Одним из ключевых механизмов метода является поддержка локализации через параметр locale в options.

Info.months("long", { locale: "fr" })

Результат:

[
  "janvier", "février", "mars", "avril",
  "mai", "juin", "juillet", "août",
  "septembre", "octobre", "novembre", "décembre"
]

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


Система нумерации и региональные особенности

Второй важный параметр — numberingSystem, позволяющий учитывать альтернативные системы записи чисел, используемые в разных регионах.

Info.months("short", { numberingSystem: "latn" })

Хотя для месяцев это редко влияет на результат, параметр сохраняется для унификации API и совместимости с другими методами Info.


Связь с объектом DateTime

Метод Info.months часто используется вместе с объектами DateTime, которые предоставляют конкретные даты и время в Luxon.

Пример сопоставления индекса месяца:

import { DateTime, Info } from "luxon";

const dt = DateTime.local();
const monthIndex = dt.month; // 1–12

const months = Info.months("long");
const currentMonthName = months[monthIndex - 1];

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


Индексация и порядок значений

Возвращаемый массив всегда фиксирован:

  • индекс 0 соответствует январю
  • индекс 11 соответствует декабрю

Порядок не зависит от локали и не изменяется при смене формата отображения.


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

Info.months применяется в системах, где требуется отделение логики данных от представления:

  • генерация выпадающих списков месяцев
  • построение календарных компонентов
  • локализация форм ввода дат
  • серверная генерация UI-данных
  • отчётные формы с фильтрацией по месяцам

Пример генерации списка опций:

const months = Info.months("long", { locale: "de" });

const options = months.map((name, index) => ({
  value: index + 1,
  label: name
}));

Форматы и их различия в локалях

Разные форматы могут значительно отличаться в зависимости от языка:

  • В английском языке short обычно состоит из трёх букв
  • В некоторых языках narrow может совпадать с первой буквой или быть неоднозначным
  • В ряде локалей сокращения могут быть длиннее или включать диакритику

Это связано с тем, что библиотека Luxon использует ICU (International Components for Unicode) для получения корректных локализованных данных.


Особенности поведения

  • Метод не зависит от текущей даты и времени
  • Результат всегда содержит 12 элементов
  • Значения кэшируются на уровне локали для оптимизации
  • При отсутствии указанной локали используется системная или браузерная по умолчанию
  • Форматирование строго соответствует ICU-таблицам

Типичные паттерны использования

Формирование локализованного календарного заголовка:

const { Info } = require("luxon");

function getCalendarHeader(locale) {
  const months = Info.months("long", { locale });
  const now = new Date().getMonth();
  return months[now];
}

Создание многоязычного интерфейса:

const locales = ["en", "es", "ru"];

const calendarMonths = locales.reduce((acc, loc) => {
  acc[loc] = Info.months("short", { locale: loc });
  return acc;
}, {});

Поведение при отсутствии локали

Если параметр locale не задан, используется глобальная конфигурация библиотеки или среда выполнения:

Info.months("long")

Результат зависит от системных настроек, что может приводить к различиям между серверной и клиентской средой при отсутствии явного указания локали.


Совместимость и стабильность API

Метод относится к стабильной части API и предназначен для долгосрочного использования без изменений сигнатуры. Его поведение строго регламентировано спецификацией ICU, что обеспечивает предсказуемость результата между версиями среды выполнения и платформами.