Работа с датами и временем в Luxon строится вокруг универсального
объекта DateTime, который служит центральной точкой
преобразований. Любые внешние представления времени — строки, числовые
метки, нативные объекты JavaScript, JSON-структуры — приводятся к
DateTime, а затем экспортируются в нужный формат.
Архитектура библиотеки ориентирована на симметрию входных и выходных
преобразований, что упрощает построение цепочек сериализации и
десериализации.
Документация Luxon: Luxon documentation
Наиболее распространённый формат — ISO 8601. Он поддерживается напрямую и считается базовым стандартом для обмена данными.
import { DateTime } from "luxon";
const dt = DateTime.fromISO("2026-05-23T14:30:00");
ISO-строка может содержать временную зону:
DateTime.fromISO("2026-05-23T14:30:00+06:00");
При отсутствии зоны используется локальная зона выполнения среды.
Поддерживаются миллисекунды и секунды. Различие критично, поскольку большинство API используют миллисекунды.
DateTime.fromMillis(1716472200000);
DateTime.fromSeconds(1716472200);
Преобразование числовых меток применяется при работе с базами данных, логами и API низкого уровня.
const jsDate = new Date();
const dt = DateTime.fromJSDate(jsDate);
Такой способ используется при интеграции с существующим кодом, где уже применяются стандартные объекты JavaScript.
Luxon поддерживает пользовательские шаблоны через
fromFormat.
DateTime.fromFormat("23-05-2026 14:30", "dd-MM-yyyy HH:mm");
Форматирование строго соответствует токенам Luxon и не использует синтаксис Moment.js.
DateTime.fromRFC2822("Sat, 23 May 2026 14:30:00 +0600");
DateTime.fromHTTP("Sat, 23 May 2026 14:30:00 GMT");
Такие форматы применяются при обработке HTTP-заголовков и email-данных.
Основной способ сериализации:
dt.toISO();
dt.toISODate();
dt.toISOTime();
Разделение позволяет получать только дату или время без лишних компонентов.
dt.toMillis();
dt.toSeconds();
Используется при сохранении данных в БД или передаче во внешние системы.
dt.toJSDate();
Преобразование необходимо при работе с API браузера, сторонними библиотеками и DOM-инструментами.
Метод toJSON автоматически вызывает
ISO-представление:
JSON.stringify(dt);
Результат:
"2026-05-23T14:30:00.000+06:00"
Это поведение используется в структурах REST API и WebSocket-сообщениях.
Гибкий механизм преобразования в строку:
dt.toFormat("dd LLLL yyyy, HH:mm");
Используется система токенов:
dd — день месяцаLLLL — полное название месяцаyyyy — годHH:mm — времяdt.toLocaleString(DateTime.DATETIME_MED);
Доступны предустановленные пресеты:
DATETIME_FULLDATETIME_MEDDATE_SHORTTIME_SIMPLEЛокализация зависит от текущей языковой настройки.
Luxon поддерживает объектное представление:
const obj = dt.toObject();
const restored = DateTime.fromObject(obj);
Структура:
{
year: 2026,
month: 5,
day: 23,
hour: 14,
minute: 30
}
Используется при сериализации сложных структур без строкового формата.
dt.setZone("Europe/Paris");
Семантика: момент времени остаётся тем же, изменяется интерпретация.
dt.setZone("Europe/Paris", { keepLocalTime: true });
В этом режиме локальное время сохраняется, но меняется абсолютная интерпретация.
dt.toUTC();
Используется при унификации данных перед хранением или сравнением.
dt.toLocal();
Применяется при отображении данных пользователю.
Некоторые форматы не сохраняют всю информацию:
toISODate() — теряет времяtoISOTime() — теряет датуtoFormat() — зависит от шаблонаtoObject() — может не включать секунды/миллисекунды при
их отсутствииПонимание этих ограничений важно при сериализации для долговременного хранения.
Epoch-время используется как промежуточное представление между форматами:
const millis = dt.toMillis();
const dt2 = DateTime.fromMillis(millis);
Такой подход устраняет различия между строковыми форматами и временными зонами.
Luxon допускает последовательные операции:
const result = DateTime
.fromISO("2026-05-23T14:30:00")
.setZone("UTC")
.toFormat("yyyy-LL-dd HH:mm");
Каждый шаг возвращает новый DateTime, не изменяя
исходный объект, что исключает побочные эффекты при конвертации.
fromISO)toMillis)toISO)toLocaleString или
toFormatТакая модель минимизирует неоднозначность и упрощает интеграцию между системами с разными часовыми поясами и стандартами времени.