Текущая дата и время

Библиотека Luxon предоставляет класс DateTime, предназначенный для работы с датой, временем, часовыми поясами и форматированием. Основной способ получения текущих даты и времени — метод DateTime.now().

import { DateTime } from "luxon";

const now = DateTime.now();

console.log(now);

Метод возвращает объект DateTime, содержащий:

  • текущую дату;
  • текущее время;
  • миллисекунды;
  • информацию о временной зоне;
  • локаль.

Структура объекта 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-времени

UTC — универсальное координированное время, независимое от локальных часовых поясов.

const utcNow = DateTime.utc();

console.log(utcNow.toString());

Альтернативный вариант:

const utcNow = DateTime.now().toUTC();

console.log(utcNow.toString());

Форматирование текущей даты

Метод toFormat()

Самый гибкий способ форматирования.

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

ISO-формат

Метод 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);

Unix timestamp

Timestamp — количество миллисекунд с 1 января 1970 года.

const now = DateTime.now();

console.log(now.toMillis());

Timestamp в секундах

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);

Использование Luxon в Node.js

Установка:

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

Возможность 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);

Частые ошибки

Использование объекта Date вместо DateTime

Неправильно:

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);