Библиотека 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);
Результат:
П
toFormatdate.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() и weekdayLongweekdayLongВозвращает день недели для конкретной даты.
date.weekdayLong
Info.weekdays()Возвращает полный список дней недели для локали.
Info.weekdays("long", {
locale: "ru"
});
В среде 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() |
массив | ["пн", ...] |