Библиотека Luxon распространяется через npm и используется как
современная альтернатива стандартному объекту Date.
Основной акцент сделан на удобной работе с датами, временем, часовыми
поясами и форматированием.
Установка через npm:
npm install luxon
Подключение в проекте:
import { DateTime } from "luxon";
Для CommonJS:
const { DateTime } = require("luxon");
Главный класс библиотеки — DateTime. Он представляет
конкретную дату и время.
Создание объекта с текущими датой и временем:
import { DateTime } from "luxon";
const now = DateTime.now();
console.log(now);
Результат будет содержать объект с большим количеством информации:
DateTime {
ts: 1716400000000,
zone: UTC+6,
locale: ru,
...
}
Luxon не использует изменяемые объекты. Любая операция возвращает
новый экземпляр DateTime.
После создания объекта можно получать отдельные части даты.
const now = DateTime.now();
console.log(now.year);
console.log(now.month);
console.log(now.day);
console.log(now.hour);
console.log(now.minute);
Пример вывода:
2026
5
23
14
35
Основные свойства:
| Свойство | Описание |
|---|---|
year |
Год |
month |
Месяц |
day |
День месяца |
hour |
Часы |
minute |
Минуты |
second |
Секунды |
weekday |
День недели |
Без форматирования объект DateTime выводится неудобно.
Для преобразования даты в строку используется метод
toFormat().
const now = DateTime.now();
console.log(
now.toFormat("dd.MM.yyyy")
);
Результат:
23.05.2026
Формат с временем:
console.log(
now.toFormat("dd.MM.yyyy HH:mm:ss")
);
Результат:
23.05.2026 14:35:12
| Токен | Значение |
|---|---|
dd |
День |
MM |
Месяц |
yyyy |
Год |
HH |
Часы |
mm |
Минуты |
ss |
Секунды |
Пример:
const now = DateTime.now();
const formatted = now.toFormat(
"yyyy/MM/dd HH:mm"
);
console.log(formatted);
Luxon умеет преобразовывать строки в объект
DateTime.
const date = DateTime.fromISO(
"2026-05-23"
);
console.log(date.toString());
ISO-формат — международный стандарт хранения даты и времени.
Пример с временем:
const date = DateTime.fromISO(
"2026-05-23T18:30:00"
);
console.log(
date.toFormat("dd.MM.yyyy HH:mm")
);
Дата может быть создана из отдельных компонентов.
const birthday = DateTime.local(
1998,
7,
12,
14,
20
);
console.log(
birthday.toFormat("dd.MM.yyyy HH:mm")
);
Аргументы передаются в следующем порядке:
DateTime.local(
год,
месяц,
день,
часы,
минуты,
секунды
);
Одно из главных преимуществ Luxon — удобная поддержка временных зон.
Создание даты в определённом часовом поясе:
const date = DateTime.now().setZone(
"Europe/Moscow"
);
console.log(date.toString());
Пример для Токио:
const tokyo = DateTime.now().setZone(
"Asia/Tokyo"
);
console.log(
tokyo.toFormat("HH:mm")
);
Метод plus() добавляет время.
const now = DateTime.now();
const tomorrow = now.plus({
days: 1
});
console.log(
tomorrow.toFormat("dd.MM.yyyy")
);
Добавление нескольких значений:
const future = now.plus({
days: 5,
hours: 3,
minutes: 20
});
console.log(
future.toFormat("dd.MM.yyyy HH:mm")
);
Метод minus() работает аналогично, но вычитает
время.
const yesterday = now.minus({
days: 1
});
console.log(
yesterday.toFormat("dd.MM.yyyy")
);
Сравнение возможно через числовое значение времени.
const a = DateTime.fromISO("2026-05-20");
const b = DateTime.fromISO("2026-05-25");
console.log(a < b);
Также можно использовать метод equals().
const d1 = DateTime.now();
const d2 = d1;
console.log(
d1.equals(d2)
);
Метод diff() вычисляет разницу.
const start = DateTime.fromISO(
"2026-05-01"
);
const end = DateTime.fromISO(
"2026-05-10"
);
const diff = end.diff(start, "days");
console.log(diff.days);
Результат:
9
Разница сразу в нескольких единицах:
const diff = end.diff(start, [
"days",
"hours"
]);
console.log(diff.toObject());
Luxon поддерживает локали для отображения дат на разных языках.
const now = DateTime.now().setLocale("ru");
console.log(
now.toLocaleString(DateTime.DATE_FULL)
);
Результат:
23 мая 2026 г.
Английская локаль:
const english = DateTime.now()
.setLocale("en");
console.log(
english.toLocaleString(
DateTime.DATE_FULL
)
);
Luxon содержит встроенные шаблоны.
const now = DateTime.now();
console.log(
now.toLocaleString(
DateTime.DATE_SHORT
)
);
Популярные пресеты:
| Константа | Формат |
|---|---|
DATE_SHORT |
Краткая дата |
DATE_MED |
Средняя форма |
DATE_FULL |
Полная дата |
DATETIME_FULL |
Дата и время |
Пример:
console.log(
now.toLocaleString(
DateTime.DATETIME_FULL
)
);
Иногда требуется совместимость со встроенным JavaScript API.
const luxonDate = DateTime.now();
const jsDate = luxonDate.toJSDate();
console.log(jsDate);
Обратное преобразование:
const jsDate = new Date();
const luxonDate =
DateTime.fromJSDate(jsDate);
console.log(
luxonDate.toFormat("dd.MM.yyyy")
);
Luxon умеет определять ошибки при создании даты.
const invalid = DateTime.fromISO(
"2026-99-99"
);
console.log(invalid.isValid);
Результат:
false
Получение причины ошибки:
console.log(
invalid.invalidReason
);
Небольшая программа, объединяющая основные возможности Luxon:
import { DateTime } from "luxon";
const now = DateTime.now();
console.log(
"Текущее время:"
);
console.log(
now.toFormat(
"dd.MM.yyyy HH:mm:ss"
)
);
const tomorrow = now.plus({
days: 1
});
console.log(
"Завтра:"
);
console.log(
tomorrow.toFormat(
"dd.MM.yyyy"
)
);
const moscow = now.setZone(
"Europe/Moscow"
);
console.log(
"Время в Москве:"
);
console.log(
moscow.toFormat("HH:mm")
);
const diff = tomorrow.diff(
now,
"hours"
);
console.log(
"Разница в часах:"
);
console.log(diff.hours);
Практически любой сценарий работы с библиотекой состоит из трёх этапов:
DateTimeПример:
const result = DateTime.now()
.plus({ days: 7 })
.setLocale("ru")
.toFormat("dd LLLL yyyy");
console.log(result);
Такой подход делает код компактным, читаемым и удобным для дальнейшей поддержки.