День недели и день года

В Luxon день недели представлен как числовое значение в диапазоне от 1 до 7, где используется ISO-стандарт: 1 соответствует понедельнику, 7 — воскресенью. Это поведение отличается от некоторых стандартных JavaScript-методов, где неделя часто начинается с воскресенья и имеет индекс 0.

Основное свойство для работы с днем недели — weekday:

import { DateTime } from 'luxon';

const dt = DateTime.local(2026, 5, 23);
dt.weekday; // число от 1 до 7

Значение weekday всегда зависит от календарной локали ISO и не меняется произвольно, что делает его удобным для систем планирования, расписаний и аналитики.

Текстовое представление дня недели

Luxon предоставляет несколько способов получить строковое представление дня недели:

  • weekdayLong — полное название дня
  • weekdayShort — сокращенное название дня
const dt = DateTime.local();

dt.weekdayLong;  // например "Saturday"
dt.weekdayShort; // например "Sat"

Язык вывода зависит от локали:

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

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

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

Изменение локали и влияние на вывод

Luxon позволяет управлять локалью через метод setLocale, не изменяя при этом саму дату:

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

dt.setLocale('en').weekdayLong; // "Saturday"
dt.setLocale('fr').weekdayLong; // "samedi"
dt.setLocale('de').weekdayLong; // "Samstag"

Сама числовая модель недели при этом остается ISO-совместимой и неизменной.

Сравнение и вычисления по дням недели

День недели часто используется для фильтрации и логики расписаний:

const dt = DateTime.local();

if (dt.weekday === 1) {
  // понедельник
}

if (dt.weekday >= 6) {
  // выходные
}

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


День года

День года в Luxon представлен свойством ordinal. Оно показывает порядковый номер дня в пределах года — от 1 до 365 или 366 в високосном году.

const dt = DateTime.local(2026, 5, 23);
dt.ordinal;

Значение ordinal полезно при работе с годовыми циклами, статистикой и календарными расчетами.

Диапазон значений и високосные годы

  • обычный год: 1–365
  • високосный год: 1–366

Luxon автоматически учитывает календарные правила григорианской системы:

const leap = DateTime.local(2024, 12, 31);
leap.ordinal; // 366

Это позволяет корректно выполнять вычисления без ручной проверки условий високосности.

Форматирование дня года

Помимо свойства ordinal, Luxon поддерживает форматирование через токен o:

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

dt.toFormat('o'); // строковое представление дня года

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

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

День года удобен для задач, связанных с временными рядами:

const data = [
  DateTime.local(2026, 1, 10),
  DateTime.local(2026, 2, 15),
  DateTime.local(2026, 5, 23)
];

const grouped = data.reduce((acc, dt) => {
  const key = dt.ordinal;
  acc[key] = (acc[key] || 0) + 1;
  return acc;
}, {});

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

Сдвиги и преобразования

При изменении даты через методы вроде plus и minus значение ordinal пересчитывается автоматически:

const dt = DateTime.local(2026, 1, 1);

dt.plus({ days: 100 }).ordinal;

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


Сочетание дня недели и дня года

Совместное использование weekday и ordinal позволяет решать задачи календарного анализа:

const dt = DateTime.local();

const info = {
  weekday: dt.weekday,
  dayOfYear: dt.ordinal
};

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

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

Стабильность ISO-нумерации дня недели и линейность ordinal делают Luxon удобным инструментом для подобных вычислений без необходимости дополнительной нормализации дат.