Библиотека Luxon предоставляет два основных подхода к форматированию даты и времени:
Макросы предназначены для быстрого получения локализованных строк
даты и времени без необходимости вручную составлять шаблоны. Вместо
сложных комбинаций вроде dd.MM.yyyy HH:mm:ss используются
предопределённые наборы форматов.
Макросы решают несколько задач:
Пример:
import { DateTime } from "luxon";
const dt = DateTime.now();
console.log(dt.toLocaleString(DateTime.DATE_FULL));
Результат для русской локали:
24 мая 2026 г.
Для английской локали:
May 24, 2026
Один и тот же код адаптируется под язык и регион.
Макросы используются через метод toLocaleString().
Общий синтаксис:
DateTime.toLocaleString(formatMacro)
Пример:
const dt = DateTime.now();
console.log(
dt.toLocaleString(DateTime.TIME_SIMPLE)
);
Результат:
14:35
Краткий формат даты.
const dt = DateTime.local(2026, 5, 24);
console.log(
dt.toLocaleString(DateTime.DATE_SHORT)
);
Результат:
24.05.2026
Для en-US:
5/24/2026
Средний формат даты.
console.log(
dt.toLocaleString(DateTime.DATE_MED)
);
Результат:
24 мая 2026 г.
Средний формат даты с днём недели.
console.log(
dt.toLocaleString(DateTime.DATE_MED_WITH_WEEKDAY)
);
Результат:
вс, 24 мая 2026 г.
Полный формат даты.
console.log(
dt.toLocaleString(DateTime.DATE_FULL)
);
Результат:
24 мая 2026 г.
Для некоторых локалей формат становится более подробным.
Максимально подробный формат даты.
console.log(
dt.toLocaleString(DateTime.DATE_HUGE)
);
Результат:
воскресенье, 24 мая 2026 г.
Краткое время.
console.log(
dt.toLocaleString(DateTime.TIME_SIMPLE)
);
Результат:
14:35
Время с секундами.
console.log(
dt.toLocaleString(DateTime.TIME_WITH_SECONDS)
);
Результат:
14:35:48
Время с кратким часовым поясом.
console.log(
dt.toLocaleString(DateTime.TIME_WITH_SHORT_OFFSET)
);
Результат:
14:35 GMT+6
Время с полным смещением.
console.log(
dt.toLocaleString(DateTime.TIME_WITH_LONG_OFFSET)
);
Результат:
14:35 GMT+06:00
24-часовой формат.
console.log(
dt.toLocaleString(DateTime.TIME_24_SIMPLE)
);
Результат:
14:35
24-часовой формат с секундами.
console.log(
dt.toLocaleString(DateTime.TIME_24_WITH_SECONDS)
);
Результат:
14:35:48
Luxon предоставляет готовые макросы для даты и времени одновременно.
console.log(
dt.toLocaleString(DateTime.DATETIME_SHORT)
);
Результат:
24.05.2026, 14:35
console.log(
dt.toLocaleString(DateTime.DATETIME_SHORT_WITH_SECONDS)
);
Результат:
24.05.2026, 14:35:48
console.log(
dt.toLocaleString(DateTime.DATETIME_MED)
);
Результат:
24 мая 2026 г., 14:35
console.log(
dt.toLocaleString(DateTime.DATETIME_MED_WITH_SECONDS)
);
Результат:
24 мая 2026 г., 14:35:48
console.log(
dt.toLocaleString(DateTime.DATETIME_FULL)
);
Результат:
24 мая 2026 г., 14:35 GMT+6
console.log(
dt.toLocaleString(DateTime.DATETIME_FULL_WITH_SECONDS)
);
Результат:
24 мая 2026 г., 14:35:48 GMT+6
console.log(
dt.toLocaleString(DateTime.DATETIME_HUGE)
);
Результат:
воскресенье, 24 мая 2026 г., 14:35 GMT+6
console.log(
dt.toLocaleString(DateTime.DATETIME_HUGE_WITH_SECONDS)
);
Результат:
воскресенье, 24 мая 2026 г., 14:35:48 GMT+6
Макросы полностью зависят от локали.
Локаль задаётся методом setLocale().
const dt = DateTime.now()
.setLocale("ru");
console.log(
dt.toLocaleString(DateTime.DATE_HUGE)
);
Результат:
воскресенье, 24 мая 2026 г.
const dt = DateTime.now()
.setLocale("en");
console.log(
dt.toLocaleString(DateTime.DATE_HUGE)
);
Результат:
Sunday, May 24, 2026
const dt = DateTime.now()
.setLocale("de");
console.log(
dt.toLocaleString(DateTime.DATE_HUGE)
);
Результат:
Sonntag, 24. Mai 2026
Макросы автоматически учитывают временную зону.
const dt = DateTime.now()
.setZone("Europe/Berlin")
.setLocale("de");
console.log(
dt.toLocaleString(DateTime.DATETIME_FULL)
);
Результат:
24. Mai 2026, 10:35 MESZ
В Luxon существует два механизма форматирования:
| Метод | Назначение |
|---|---|
toLocaleString() |
локализованные макросы |
toFormat() |
ручные шаблоны |
dt.toLocaleString(DateTime.DATE_SHORT);
dt.toFormat("dd.MM.yyyy");
Макросы особенно удобны:
Метод toFormat() предпочтительнее:
Пример:
dt.toFormat("yyyy-MM-dd");
Метод toLocaleString() может принимать объект параметров
Intl.DateTimeFormat.
Пример:
console.log(
dt.toLocaleString({
weekday: "long",
month: "short",
day: "numeric"
})
);
Результат:
воскресенье, 24 мая
Макросы можно расширять дополнительными параметрами.
console.log(
dt.toLocaleString(
DateTime.DATE_FULL,
{
locale: "fr"
}
)
);
Результат:
24 mai 2026
Luxon поддерживает различные системы записи чисел.
const dt = DateTime.now().reconfigure({
locale: "ar",
numberingSystem: "arab"
});
console.log(
dt.toLocaleString(DateTime.DATE_FULL)
);
Результат:
٢٤ مايو ٢٠٢٦
Поддерживаются альтернативные календари.
const dt = DateTime.now().reconfigure({
locale: "ja",
outputCalendar: "japanese"
});
console.log(
dt.toLocaleString(DateTime.DATE_FULL)
);
Результат может выглядеть так:
令和8年5月24日
const utc = DateTime.utc();
console.log(
utc.toLocaleString(
DateTime.DATETIME_FULL
)
);
Результат:
24 мая 2026 г., 08:35 UTC
const birthday = DateTime.local(1995, 12, 18);
console.log(
birthday.toLocaleString(
DateTime.DATE_HUGE
)
);
Результат:
понедельник, 18 декабря 1995 г.
const dates = [
DateTime.local(2026, 1, 1),
DateTime.local(2026, 5, 9),
DateTime.local(2026, 12, 31)
];
const result = dates.map(date =>
date.toLocaleString(DateTime.DATE_FULL)
);
console.log(result);
Результат:
[
'1 января 2026 г.',
'9 мая 2026 г.',
'31 декабря 2026 г.'
]
Ошибка:
dt.toFormat(DateTime.DATE_FULL);
toFormat() не работает с макросами.
Без локали формат зависит от окружения:
dt.toLocaleString(DateTime.DATE_FULL);
На разных системах вывод может отличаться.
DateTime.TIME_SIMPLE
может выводить:
2:35 PM
в английской локали.
Для принудительного 24-часового режима:
DateTime.TIME_24_SIMPLE
import { DateTime } from "luxon";
const createdAt = DateTime.fromISO(
"2026-05-24T14:35:48"
);
console.log(
createdAt.toLocaleString(
DateTime.DATETIME_MED
)
);
Результат:
24 мая 2026 г., 14:35
function formatDate(date, locale) {
return date
.setLocale(locale)
.toLocaleString(DateTime.DATE_HUGE);
}
const dt = DateTime.now();
console.log(formatDate(dt, "ru"));
console.log(formatDate(dt, "en"));
console.log(formatDate(dt, "fr"));
Результат:
воскресенье, 24 мая 2026 г.
Sunday, May 24, 2026
dimanche 24 mai 2026
| Макрос | Пример |
|---|---|
DATE_SHORT |
24.05.2026 |
DATE_MED |
24 мая 2026 г. |
DATE_FULL |
24 мая 2026 г. |
DATE_HUGE |
воскресенье, 24 мая 2026 г. |
TIME_SIMPLE |
14:35 |
TIME_WITH_SECONDS |
14:35:48 |
DATETIME_SHORT |
24.05.2026, 14:35 |
DATETIME_MED |
24 мая 2026 г., 14:35 |
DATETIME_FULL |
24 мая 2026 г., 14:35 GMT+6 |
DATETIME_HUGE |
воскресенье, 24 мая 2026 г., 14:35 GMT+6 |