Метод toISODate и toISOTime

Метод toISODate() в библиотеке Luxon возвращает строку с датой в стандарте ISO 8601 без включения времени. Формат результата строго фиксирован и соответствует шаблону:

YYYY-MM-DD

Это делает метод удобным для задач, где требуется передавать только календарную дату без временной составляющей и без учёта часовых поясов в итоговой строке.

В основе метода лежит объект DateTime, который хранит полную информацию о моменте времени, включая дату, время и временную зону. При вызове toISODate() происходит извлечение только компонент даты.

Базовое поведение

import { DateTime } from "luxon";

const dt = DateTime.local(2026, 1, 24, 18, 45);
const result = dt.toISODate();

console.log(result);

Результат:

2026-01-24

Время полностью исключается из строки, даже если оно присутствует в исходном объекте.

Работа с часовыми поясами

toISODate() не отображает временную зону, однако вычисление даты происходит с учётом текущего контекста DateTime.

const dt = DateTime.fromISO("2026-01-24T23:30:00", { zone: "Asia/Almaty" });

console.log(dt.toISODate());

Выход:

2026-01-24

Если значение времени пересекает границу суток в другой зоне, результат может изменяться при смене zone.

Поведение при переходе суток

const dt = DateTime.fromISO("2026-01-24T23:30:00", { zone: "UTC" })
  .setZone("Asia/Tokyo");

console.log(dt.toISODate());

Дата может стать следующей, так как конвертация временной зоны изменяет календарную дату.


Метод toISOTime()

Метод toISOTime() возвращает строку, содержащую только временную часть даты в формате ISO 8601. Формат зависит от точности и может включать часы, минуты, секунды и миллисекунды.

Базовый формат:

HH:mm:ss.sss

Базовое использование

import { DateTime } from "luxon";

const dt = DateTime.local(2026, 1, 24, 18, 45, 12);
const result = dt.toISOTime();

console.log(result);

Результат:

18:45:12.000

Если миллисекунды равны нулю, они всё равно могут отображаться в зависимости от настроек метода.


Параметры точности toISOTime()

Метод поддерживает объект параметров, позволяющий управлять точностью и форматом вывода.

Отключение миллисекунд

const dt = DateTime.local(2026, 1, 24, 18, 45, 12, 345);

console.log(dt.toISOTime({ suppressMilliseconds: true }));

Результат:

18:45:12

Отключение секунд

console.log(dt.toISOTime({ suppressSeconds: true }));

Результат:

18:45

Исключение нулевых значений

const dt = DateTime.local(2026, 1, 24, 18, 45, 0);

console.log(dt.toISOTime({ suppressSeconds: true }));

Результат:

18:45

Влияние часовых поясов

toISOTime() всегда возвращает время в рамках текущего DateTime объекта, без добавления информации о зоне.

const dt = DateTime.fromISO("2026-01-24T18:45:00", { zone: "UTC" })
  .setZone("Asia/Almaty");

console.log(dt.toISOTime());

Значение времени изменяется в соответствии с разницей часовых поясов.


Связь с toISO()

Методы toISODate() и toISOTime() являются частными случаями toISO():

  • toISO() — возвращает полную дату и время
  • toISODate() — только дата
  • toISOTime() — только время
const dt = DateTime.local(2026, 1, 24, 18, 45, 12);

dt.toISO();      // 2026-01-24T18:45:12.000+06:00
dt.toISODate();  // 2026-01-24
dt.toISOTime();  // 18:45:12.000

Разделение полезно при работе с API, где требуется строгое соответствие формату без лишних компонентов.


Особенности форматирования и стабильность результата

Оба метода возвращают строки, соответствующие ISO 8601, что гарантирует:

  • предсказуемый порядок компонентов
  • отсутствие локализации
  • совместимость с большинством backend-систем
  • корректную сортировку строк в лексикографическом порядке для дат

Типичные сценарии использования

toISODate() применяется при:

  • сохранении даты в базе данных без времени
  • фильтрации записей по календарным дням
  • построении ключей группировки по датам
const key = dt.toISODate();

toISOTime() применяется при:

  • отображении времени событий
  • логировании операций внутри одного дня
  • работе с расписаниями
const time = dt.toISOTime({ suppressSeconds: true });

Отличия от стандартного toString()

Стандартный toString() в Luxon учитывает локальные настройки и может возвращать разные форматы, тогда как ISO-методы всегда дают унифицированный результат.

dt.toString();     // локализованный формат
dt.toISODate();    // строго YYYY-MM-DD
dt.toISOTime();    // строго HH:mm:ss