Первый пример работы

Библиотека 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.


Получение данных из объекта 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
  )
);

Преобразование в стандартный Date

Иногда требуется совместимость со встроенным 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);

Типичная структура работы с Luxon

Практически любой сценарий работы с библиотекой состоит из трёх этапов:

  1. Создание объекта DateTime
  2. Выполнение операций
  3. Форматирование результата

Пример:

const result = DateTime.now()
  .plus({ days: 7 })
  .setLocale("ru")
  .toFormat("dd LLLL yyyy");

console.log(result);

Такой подход делает код компактным, читаемым и удобным для дальнейшей поддержки.