Локализация дней недели

Библиотека Luxon поддерживает полноценную локализацию дат, времени и календарных представлений через API Intl браузера или среды выполнения Node.js. Одной из наиболее востребованных задач является отображение дней недели на разных языках и в различных форматах.


Базовая локализация через setLocale

Объект DateTime позволяет задавать локаль методом setLocale().

import { DateTime } from "luxon";

const date = DateTime.now().setLocale("ru");

console.log(date.toFormat("cccc"));
// понедельник

Основные форматы дней недели

Формат Описание Пример
c номер дня недели 1
ccc короткое название пн
cccc полное название понедельник
ccccc минимальное сокращение П

Локализация на разных языках

Русский язык

const date = DateTime.now().setLocale("ru");

console.log(date.toFormat("cccc"));
console.log(date.toFormat("ccc"));

Результат:

понедельник
пн

Английский язык

const date = DateTime.now().setLocale("en");

console.log(date.toFormat("cccc"));
console.log(date.toFormat("ccc"));

Результат:

Monday
Mon

Немецкий язык

const date = DateTime.now().setLocale("de");

console.log(date.toFormat("cccc"));

Результат:

Montag

Французский язык

const date = DateTime.now().setLocale("fr");

console.log(date.toFormat("cccc"));

Результат:

lundi

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

Локаль можно задавать сразу в момент создания объекта.

const date = DateTime.now({
  locale: "ru"
});

console.log(date.toFormat("cccc"));

Также поддерживается установка локали через объект конфигурации:

const date = DateTime.local().reconfigure({
  locale: "ru"
});

Метод weekday

Свойство weekday возвращает номер дня недели.

const date = DateTime.now();

console.log(date.weekday);

Результат:

1

Соответствие номеров

Значение День
1 понедельник
2 вторник
3 среда
4 четверг
5 пятница
6 суббота
7 воскресенье

В Luxon используется стандарт ISO 8601, где неделя начинается с понедельника.


Получение названия дня недели без форматирования строки

Метод weekdayLong возвращает полное название дня.

const date = DateTime.now().setLocale("ru");

console.log(date.weekdayLong);

Результат:

понедельник

Короткое название

console.log(date.weekdayShort);

Результат:

пн

Очень короткое название

console.log(date.weekdayNarrow);

Результат:

П

Сравнение способов получения дня недели

Через toFormat

date.toFormat("cccc")

Преимущества:

  • гибкая настройка форматирования;
  • поддержка сложных шаблонов;
  • единый стиль работы с датами.

Через свойства объекта

date.weekdayLong

Преимущества:

  • более читаемый код;
  • быстрее воспринимается;
  • подходит для простых сценариев.

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

Локализация дней недели особенно важна при создании календарей.

Генерация массива дней недели

import { Info } from "luxon";

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

console.log(weekdays);

Результат:

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

Короткие названия дней

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

console.log(weekdays);

Результат:

[
  "пн",
  "вт",
  "ср",
  "чт",
  "пт",
  "сб",
  "вс"
]

Узкие названия

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

console.log(weekdays);

Результат:

[
  "П",
  "В",
  "С",
  "Ч",
  "П",
  "С",
  "В"
]

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


Локализация с учётом региона

Локаль может содержать региональную часть.

DateTime.now().setLocale("en-US")
DateTime.now().setLocale("en-GB")
DateTime.now().setLocale("pt-BR")

Это влияет:

  • на формат даты;
  • на особенности написания;
  • на календарные стандарты;
  • на отображение дней недели.

Использование toLocaleString

Метод toLocaleString() работает через Intl.DateTimeFormat.

const date = DateTime.now().setLocale("ru");

console.log(
  date.toLocaleString({
    weekday: "long"
  })
);

Результат:

понедельник

Короткий формат

console.log(
  date.toLocaleString({
    weekday: "short"
  })
);

Результат:

пн

Одновременное отображение даты и дня недели

const date = DateTime.now().setLocale("ru");

console.log(
  date.toFormat("cccc, dd LLLL yyyy")
);

Результат:

понедельник, 15 января 2026

Работа с массивом дат

Получение названий дней недели за неделю

import { DateTime } from "luxon";

const start = DateTime.now().startOf("week");

for (let i = 0; i < 7; i++) {
  const day = start.plus({ days: i });

  console.log(day.setLocale("ru").weekdayLong);
}

Построение пользовательского календаря

import { DateTime, Info } from "luxon";

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

console.log(weekdays);

const today = DateTime.now();

console.log(today.weekdayLong);

Разница между Info.weekdays() и weekdayLong

weekdayLong

Возвращает день недели для конкретной даты.

date.weekdayLong

Info.weekdays()

Возвращает полный список дней недели для локали.

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

Использование локализации в Node.js

В среде Node.js корректность локализации зависит от поддержки ICU.

Проверка:

console.log(
  Intl.DateTimeFormat.supportedLocalesOf(["ru"])
);

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


Глобальная локаль

Можно установить локаль по умолчанию.

import { Settings } from "luxon";

Settings.defaultLocale = "ru";

После этого все новые объекты DateTime будут использовать русский язык.

const date = DateTime.now();

console.log(date.weekdayLong);

Переопределение глобальной локали

Settings.defaultLocale = "en";

const ruDate = DateTime.now().setLocale("ru");
const deDate = DateTime.now().setLocale("de");

Использование локали браузера

const locale = navigator.language;

const date = DateTime.now().setLocale(locale);

console.log(date.weekdayLong);

Поддержка нескольких языков

const locales = ["ru", "en", "de", "fr"];

locales.forEach(locale => {
  const day = DateTime.now()
    .setLocale(locale)
    .weekdayLong;

  console.log(locale, day);
});

Формирование расписаний

const lessonDate = DateTime.fromISO("2026-09-01")
  .setLocale("ru");

console.log(
  lessonDate.toFormat("cccc")
);

Локализация в интерфейсах бронирования

const bookingDate = DateTime.now()
  .plus({ days: 3 })
  .setLocale("ru");

console.log(
  bookingDate.toFormat("cccc, dd.MM.yyyy")
);

Работа с часовыми поясами

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

const date = DateTime.now()
  .setZone("Asia/Almaty")
  .setLocale("ru");

console.log(date.weekdayLong);

Комбинирование локали и таймзоны

const tokyoDate = DateTime.now()
  .setZone("Asia/Tokyo")
  .setLocale("ja");

console.log(
  tokyoDate.toFormat("cccc")
);

Типичные ошибки

Отсутствие локали

DateTime.now().weekdayLong

Результат может быть:

Monday

если система использует английскую локаль.


Использование неправильного шаблона

date.toFormat("ddd")

В Luxon такого формата нет.

Правильно:

date.toFormat("ccc")

Практический пример: мини-календарь

import { DateTime, Info } from "luxon";

const locale = "ru";

const weekdays = Info.weekdays("short", {
  locale
});

console.log(weekdays);

const start = DateTime.now()
  .startOf("week")
  .setLocale(locale);

for (let i = 0; i < 7; i++) {
  const day = start.plus({ days: i });

  console.log(
    day.toFormat("cccc dd")
  );
}

Практический пример: расписание событий

const events = [
  "2026-01-12",
  "2026-01-13",
  "2026-01-14"
];

events.forEach(event => {
  const date = DateTime
    .fromISO(event)
    .setLocale("ru");

  console.log(
    date.toFormat("cccc")
  );
});

Поддерживаемые варианты отображения

Метод Формат Пример
weekdayLong полный понедельник
weekdayShort короткий пн
weekdayNarrow минимальный П
toFormat("cccc") полный понедельник
toFormat("ccc") короткий пн
Info.weekdays() массив ["пн", ...]