Библиотека Luxon предоставляет класс DateTime,
предназначенный для работы с датой, временем, часовыми поясами и
форматированием. Основной способ получения текущих даты и времени —
метод DateTime.now().
import { DateTime } from "luxon";
const now = DateTime.now();
console.log(now);
Метод возвращает объект DateTime, содержащий:
Объект DateTime не является стандартным объектом
Date из Javascript. Это полноценная обёртка с большим
количеством встроенных методов.
const now = DateTime.now();
console.log(now.year); // 2026
console.log(now.month); // 5
console.log(now.day); // 23
console.log(now.hour); // часы
console.log(now.minute); // минуты
console.log(now.second); // секунды
console.log(now.millisecond); // миллисекунды
| Свойство | Описание |
|---|---|
year |
Год |
month |
Номер месяца |
day |
День месяца |
hour |
Часы |
minute |
Минуты |
second |
Секунды |
millisecond |
Миллисекунды |
weekday |
День недели |
ordinal |
День года |
По умолчанию DateTime.now() использует системную
временную зону.
const now = DateTime.now();
console.log(now.zoneName);
Пример результата:
Asia/Almaty
Метод setZone() позволяет преобразовать текущее время в
другой часовой пояс.
const now = DateTime.now();
const london = now.setZone("Europe/London");
const tokyo = now.setZone("Asia/Tokyo");
const newYork = now.setZone("America/New_York");
console.log(london.toString());
console.log(tokyo.toString());
console.log(newYork.toString());
UTC — универсальное координированное время, независимое от локальных часовых поясов.
const utcNow = DateTime.utc();
console.log(utcNow.toString());
Альтернативный вариант:
const utcNow = DateTime.now().toUTC();
console.log(utcNow.toString());
Самый гибкий способ форматирования.
const now = DateTime.now();
console.log(now.toFormat("dd.MM.yyyy"));
Результат:
23.05.2026
| Токен | Значение | Пример |
|---|---|---|
yyyy |
Год | 2026 |
MM |
Месяц | 05 |
dd |
День | 23 |
HH |
Часы 24-формат | 18 |
hh |
Часы 12-формат | 06 |
mm |
Минуты | 45 |
ss |
Секунды | 12 |
ccc |
Короткий день недели | Sat |
cccc |
Полный день недели | Saturday |
const now = DateTime.now();
console.log(
now.toFormat("dd.MM.yyyy HH:mm:ss")
);
Результат:
23.05.2026 18:45:10
Метод toISO() создаёт строку в международном стандарте
ISO 8601.
const now = DateTime.now();
console.log(now.toISO());
Пример:
2026-05-23T18:45:10.123+05:00
Luxon содержит готовые шаблоны.
console.log(DateTime.now().toLocaleString());
console.log(
DateTime.now().toLocaleString(DateTime.DATE_FULL)
);
console.log(
DateTime.now().toLocaleString(DateTime.TIME_SIMPLE)
);
console.log(
DateTime.now().toLocaleString(DateTime.DATETIME_MED)
);
Локаль влияет на язык отображения месяцев, дней недели и форматов.
const now = DateTime.now().setLocale("ru");
console.log(
now.toLocaleString(DateTime.DATE_FULL)
);
Результат:
23 мая 2026 г.
const now = DateTime.now().setLocale("en");
console.log(
now.toLocaleString(DateTime.DATE_FULL)
);
Результат:
May 23, 2026
const now = DateTime.now();
console.log(now.monthLong);
console.log(now.monthShort);
Результат:
May
May
const now = DateTime.now();
console.log(now.weekday);
console.log(now.weekdayLong);
console.log(now.weekdayShort);
Timestamp — количество миллисекунд с 1 января 1970 года.
const now = DateTime.now();
console.log(now.toMillis());
console.log(now.toSeconds());
const now = DateTime.now();
const future = now.plus({ hours: 2 });
console.log(future > now);
const now = DateTime.now();
const anotherDate = DateTime.fromISO("2026-05-23");
console.log(
now.hasSame(anotherDate, "day")
);
const now = DateTime.now();
if (now.hour < 12) {
console.log("Утро");
} else if (now.hour < 18) {
console.log("День");
} else {
console.log("Вечер");
}
const startOfDay = DateTime.now().startOf("day");
console.log(startOfDay.toString());
const startOfMonth = DateTime.now().startOf("month");
const startOfYear = DateTime.now().startOf("year");
const endOfDay = DateTime.now().endOf("day");
console.log(endOfDay.toString());
const today = DateTime.now().toFormat("yyyy-MM-dd");
console.log(today);
const currentTime = DateTime.now().toFormat("HH:mm:ss");
console.log(currentTime);
setInterval(() => {
const now = DateTime.now();
console.log(
now.toFormat("HH:mm:ss")
);
}, 1000);
Установка:
npm install luxon
Импорт:
const { DateTime } = require("luxon");
Получение времени:
const now = DateTime.now();
console.log(now.toISO());
<script type="module">
import { DateTime } from "https://cdn.skypack.dev/luxon";
const now = DateTime.now();
console.log(now.toString());
</script>
| Возможность | Date | Luxon |
|---|---|---|
| Работа с часовыми поясами | Ограничена | Полная |
| Форматирование | Сложное | Простое |
| Локализация | Частичная | Встроенная |
| API | Низкоуровневый | Высокоуровневый |
| Иммутабельность | Нет | Да |
Luxon не изменяет исходный объект.
const now = DateTime.now();
const tomorrow = now.plus({ days: 1 });
console.log(now.toISO());
console.log(tomorrow.toISO());
Объект now остаётся неизменным.
import { DateTime } from "luxon";
function renderClock() {
const now = DateTime.now();
const time = now.toFormat("HH:mm:ss");
console.clear();
console.log(time);
}
setInterval(renderClock, 1000);
import { DateTime } from "luxon";
const hour = DateTime.now().hour;
let greeting;
if (hour < 6) {
greeting = "Доброй ночи";
} else if (hour < 12) {
greeting = "Доброе утро";
} else if (hour < 18) {
greeting = "Добрый день";
} else {
greeting = "Добрый вечер";
}
console.log(greeting);
import { DateTime } from "luxon";
const date = DateTime
.now()
.setLocale("ru")
.toFormat("dd LLLL yyyy");
console.log(date);
Неправильно:
const now = new Date();
console.log(now.toFormat("HH:mm"));
Ошибка:
toFormat is not a function
Правильно:
const now = DateTime.now();
console.log(now.toFormat("HH:mm"));
DateTime.now();
Ошибка:
DateTime is not defined
Правильный вариант:
import { DateTime } from "luxon";
Неправильно:
DateTime.now().setZone("Moscow");
Правильно:
DateTime.now().setZone("Europe/Moscow");
const dt = DateTime.fromISO("invalid");
console.log(dt.isValid);
Получение причины ошибки:
console.log(dt.invalidReason);