Luxon представляет собой современную библиотеку для работы с датой и
временем в JavaScript, разработанную с учётом ограничений встроенного
объекта Date и потребностей сложных приложений, требующих
корректной работы с часовыми поясами, локалями и календарными
операциями.
В основе Luxon лежит модель неизменяемых (immutable) объектов. Каждый объект даты и времени не изменяется после создания — любые операции возвращают новый экземпляр.
Ключевые принципы:
Такой подход снижает количество скрытых ошибок, характерных для мутируемых библиотек дат.
DateTime — центральная сущность Luxon. Она объединяет
дату, время, часовой пояс и локаль в одном объекте.
Создание текущего времени:
import { DateTime } from "luxon";
const now = DateTime.now();
Создание из конкретных компонентов:
const dt = DateTime.local(2026, 5, 23, 14, 30);
Создание в UTC:
const utc = DateTime.utc(2026, 5, 23, 14, 30);
Особенность: все операции возвращают новый
DateTime, не изменяя исходный.
Duration описывает промежутки времени: дни, часы,
минуты, секунды.
import { Duration } from "luxon";
const dur = Duration.fromObject({ hours: 2, minutes: 30 });
Duration используется для арифметики времени и преобразований.
Interval описывает временной диапазон между двумя
моментами.
import { DateTime, Interval } from "luxon";
const start = DateTime.local(2026, 1, 1);
const end = DateTime.local(2026, 12, 31);
const interval = Interval.fromDateTimes(start, end);
Одно из ключевых преимуществ Luxon — корректная работа с временными зонами.
const ny = DateTime.now().setZone("America/New_York");
const tokyo = DateTime.now().setZone("Asia/Tokyo");
Важные особенности:
Конвертация между зонами:
const utc = DateTime.utc();
const local = utc.setZone("Europe/Berlin");
Luxon предоставляет гибкую систему форматирования через
toFormat.
const dt = DateTime.now();
dt.toFormat("yyyy-MM-dd HH:mm");
Примеры токенов:
yyyy — годMM — месяцdd — деньHH — часы (24-часовой формат)mm — минутыФорматирование с локалью:
dt.setLocale("ru").toLocaleString(DateTime.DATE_FULL);
Luxon умеет создавать даты из строк и ISO-форматов.
const dt = DateTime.fromISO("2026-05-23T14:30:00");
const dt = DateTime.fromFormat("23-05-2026 14:30", "dd-MM-yyyy HH:mm");
const dt = DateTime.fromSeconds(1716460200);
Luxon позволяет выполнять операции сложения и вычитания времени.
const dt = DateTime.now().plus({ days: 3, hours: 5 });
const dt = DateTime.now().minus({ months: 1 });
Обе операции возвращают новый объект.
Сравнение осуществляется через методы startOf,
endOf, diff и обычные операторы сравнения
после приведения к числу.
const a = DateTime.local(2026, 1, 1);
const b = DateTime.local(2026, 2, 1);
const diff = b.diff(a, "days").days;
Luxon позволяет нормализовать дату до начала или конца периода.
const dt = DateTime.now();
dt.startOf("day");
dt.endOf("month");
Поддерживаемые единицы:
Luxon использует встроенный Intl API.
DateTime.now().setLocale("fr").toLocaleString(DateTime.DATE_FULL);
Форматирование автоматически адаптируется под правила страны.
Luxon поддерживает корректную работу с различными календарными сценариями через локали и Intl.
Особое внимание уделяется:
DateTime.now().toISO();
const json = DateTime.now().toJSON();
DateTime.now().toMillis();
Каждая операция возвращает новый объект:
const dt1 = DateTime.now();
const dt2 = dt1.plus({ days: 1 });
dt1 === dt2; // false
Это предотвращает:
Luxon отслеживает корректность даты.
const dt = DateTime.fromISO("invalid-date");
dt.isValid; // false
dt.invalidReason;
Это позволяет безопасно обрабатывать пользовательский ввод.
Luxon может конвертироваться в стандартный Date:
const jsDate = DateTime.now().toJSDate();
И обратно:
const dt = DateTime.fromJSDate(new Date());
Luxon оптимизирован для:
При этом библиотека остаётся более тяжёлой, чем минималистичные альтернативы, из-за поддержки зон и локалей.
const deadline = DateTime.now().plus({ days: 7 });
const event = DateTime.fromObject(
{ year: 2026, month: 5, day: 23 },
{ zone: "UTC" }
);
const interval = Interval.fromDateTimes(
DateTime.local(2026, 1, 1),
DateTime.local(2026, 6, 1)
);
interval.length("days");
Несмотря на функциональность, Luxon имеет особенности: