Метод Info.weekdays

Метод Info.weekdays относится к вспомогательному модулю Info библиотеки Luxon и предназначен для получения списка названий дней недели в заданной локали и формате отображения. Он опирается на встроенную поддержку Intl и позволяет извлекать локализованные подписи без ручного хранения языковых таблиц.

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


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

Info.weekdays(length?: string, opts?: object)

или в более полной форме:

Info.weekdays(length, format, locale)

В современных версиях Luxon предпочтительным считается использование объекта параметров.


Параметры

length — длина представления

Определяет формат названий дней недели:

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

Пример различий:

  • long: Monday
  • short: Mon
  • narrow: M

opts.locale — локаль

Позволяет задать язык и регион отображения:

{ locale: 'ru' }
{ locale: 'en-US' }
{ locale: 'de' }

При отсутствии параметра используется локаль окружения (браузера или Node.js Intl).


opts.weekStart (неофициальная зависимость поведения)

Luxon не всегда напрямую управляет началом недели через Info.weekdays, но поведение может зависеть от локали. В большинстве случаев:

  • США: неделя начинается с воскресенья
  • Европа: неделя начинается с понедельника

Возвращаемое значение

Метод возвращает массив строк:

string[]

Каждый элемент соответствует одному дню недели в порядке, принятом для данной локали.


Базовое использование

import { Info } from "luxon";

const days = Info.weekdays("long");
console.log(days);

Результат (en-US):

[
  "Monday",
  "Tuesday",
  "Wednesday",
  "Thursday",
  "Friday",
  "Saturday",
  "Sunday"
]

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

const daysRu = Info.weekdays("long", { locale: "ru" });
console.log(daysRu);

Результат:

[
  "понедельник",
  "вторник",
  "среда",
  "четверг",
  "пятница",
  "суббота",
  "воскресенье"
]

Сокращённые формы

const shortDays = Info.weekdays("short", { locale: "en-GB" });
console.log(shortDays);

Типичный результат:

[
  "Mon",
  "Tue",
  "Wed",
  "Thu",
  "Fri",
  "Sat",
  "Sun"
]

Минимальные обозначения

const narrowDays = Info.weekdays("narrow", { locale: "de" });
console.log(narrowDays);

Возможный результат:

["M", "D", "M", "D", "F", "S", "S"]

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


Внутренняя реализация и Intl

Luxon не хранит собственные таблицы перевода дней недели. Вместо этого используется Intl.DateTimeFormat:

  • генерация локализованных названий делегируется среде выполнения
  • гарантируется соответствие стандартам ECMAScript Internationalization API

Это означает:

  • минимальный размер библиотеки
  • актуальность локалей без обновления пакета
  • зависимость от поддержки окружения

Особенности порядка дней

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

Понедельник → Вторник → ... → Воскресенье

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


Практическое применение

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

const weekdays = Info.weekdays("short", { locale: "en-US" });

const header = weekdays.join(" | ");
console.log(header);

Вывод:

Mon | Tue | Wed | Thu | Fri | Sat | Sun

Генерация UI календарей

const labels = Info.weekdays("long", { locale: "ru" });

labels.forEach(day => {
  console.log(`<th>${day}</th>`);
});

Унификация локалей в интерфейсе

function getWeekdayLabels(locale) {
  return Info.weekdays("short", { locale });
}

const en = getWeekdayLabels("en");
const fr = getWeekdayLabels("fr");
const ja = getWeekdayLabels("ja");

Поведение при отсутствии Intl

Если среда выполнения не поддерживает Intl, Luxon может:

  • возвращать fallback-значения
  • или использовать базовые англоязычные строки

Современные браузеры и Node.js обычно полностью поддерживают Intl, поэтому этот сценарий встречается редко.


Производительность

Метод является лёгким, но не полностью “нулевой стоимости”:

  • каждый вызов может инициировать обращение к Intl
  • при частом использовании в циклах целесообразно кеширование результата

Пример кеширования:

const cache = new Map();

function getWeekdays(locale) {
  if (!cache.has(locale)) {
    cache.set(locale, Info.weekdays("long", { locale }));
  }
  return cache.get(locale);
}

Различие с DateTime API

Info.weekdays не зависит от конкретной даты и времени:

  • не принимает объект DateTime
  • не вычисляет день недели
  • возвращает только локализованные метки

Для работы с конкретной датой используется:

  • DateTime.weekday
  • DateTime.toFormat("cccc")

Сравнение форматов

Формат Пример (en-US) Особенности
long Monday Полные названия
short Mon Универсальные сокращения
narrow M Минимальные формы
numeric 1–7 Зависит от локали

Использование в многоязычных системах

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

  • календарные компоненты
  • планировщики
  • аналитические дашборды
  • расписания

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


Ограничения

  • отсутствие контроля над стартом недели
  • возможные коллизии в narrow-формате
  • зависимость от Intl
  • невозможность кастомизации переводов

Взаимодействие с другими методами Info

Info.weekdays часто используется вместе с:

  • Info.months — названия месяцев
  • Info.weekdaysFormat (в некоторых версиях Luxon)
  • DateTime.toLocaleString

Комбинация позволяет полностью локализовать календарные интерфейсы без внешних библиотек перевода.