Метод toISO() в Luxon предназначен для преобразования
объекта DateTime в строку формата ISO 8601 —
стандартизированное представление даты и времени, широко используемое в
API, базах данных и межсистемной передаче данных. Основная задача метода
заключается в том, чтобы обеспечить точное, однозначное и переносимое
представление момента времени с учётом временной зоны и дополнительных
параметров точности.
ISO-строка, формируемая этим методом, может включать дату, время, смещение часового пояса и дробные секунды. Luxon предоставляет гибкие настройки, позволяющие контролировать уровень детализации результата.
Метод вызывается на экземпляре DateTime:
DateTime.toISO(options?: Object): string | null
Возвращаемое значение:
string — строка в формате ISO 8601null — в случае некорректного или невалидного объекта
DateTimeРезультирующая строка обычно имеет следующий вид:
YYYY-MM-DDTHH:mm:ss.sss±HH:mm
Пример:
2026-05-23T14:45:30.123+06:00
Структура включает:
YYYY-MM-DDTHH:mm:sstoISO() всегда возвращает момент времени с привязкой к
конкретному часовому поясу, если он задан в объекте
DateTime. Это исключает неоднозначность, характерную для
локальных строковых форматов.
Luxon сохраняет информацию о зоне:
const dt = DateTime.now().setZone('Asia/Almaty');
dt.toISO();
Результат будет содержать корректное смещение:
2026-05-23T18:12:45.000+06:00
Метод позволяет контролировать, будут ли включены:
Это достигается через параметры.
Метод принимает объект опций:
toISO({
includeOffset,
suppressMilliseconds,
suppressSeconds,
includeZone
})
Определяет, будет ли добавлено смещение часового пояса.
true (по умолчанию) — смещение присутствуетfalse — смещение удаляетсяПример:
dt.toISO({ includeOffset: false });
Результат:
2026-05-23T14:45:30.123
Без указания зоны строка становится менее информативной, но может использоваться в локальных форматах хранения.
Удаляет миллисекунды из строки:
dt.toISO({ suppressMilliseconds: true });
Результат:
2026-05-23T14:45:30+06:00
Используется при необходимости уменьшить точность или соответствовать внешним API, не поддерживающим дробные секунды.
Полностью убирает секунды и миллисекунды:
dt.toISO({ suppressSeconds: true });
Результат:
2026-05-23T14:45+06:00
Применяется в интерфейсах, где точность до минуты достаточна (например, расписания).
Добавляет идентификатор временной зоны:
dt.toISO({ includeZone: true });
Результат:
2026-05-23T14:45:30.123+06:00[Asia/Almaty]
Это расширенный формат ISO, полезный для систем, где важно не только смещение, но и исходная зона.
const dt = DateTime.local(2026, 5, 23, 14, 45);
dt.toISO();
Результат:
2026-05-23T14:45:00.000+06:00
dt.toISO({ suppressMilliseconds: true });
Результат:
2026-05-23T14:45:00+06:00
dt.toISO({ includeOffset: false });
Результат:
2026-05-23T14:45:00.000
Хотя toISO() ориентирован на дату и время, при
необходимости можно получить только дату через предварительную
трансформацию:
dt.startOf('day').toISO({ suppressSeconds: true, includeOffset: true });
Результат:
2026-05-23T00:00+06:00
Если объект DateTime находится в состоянии ошибки:
const dt = DateTime.fromISO('invalid-date');
dt.toISO();
Результат:
null
Это поведение позволяет безопасно использовать метод в цепочках преобразований без риска получения некорректной строки.
При переводе в UTC форматирование сохраняет стандарт ISO с суффиксом
Z:
const dt = DateTime.utc(2026, 5, 23, 14, 45);
dt.toISO();
Результат:
2026-05-23T14:45:00.000Z
Символ Z эквивалентен нулевому смещению.
toISO() — строгий стандарт ISO 8601toString() — человеко-читаемый формат LuxonПример:
dt.toString();
dt.toISO();
toString() может возвращать локализованные строки, тогда
как toISO() всегда фиксирован.
toISO() — фиксированный стандартtoFormat() — произвольное форматированиеПример:
dt.toFormat('yyyy LLL dd HH:mm');
toISO() предпочтителен при обмене данными между
системами, тогда как toFormat() — для UI.
Результат toISO() зависит от состояния объекта:
DateTime.local())DateTime.utc())setZone())Пример:
DateTime.local().toISO();
DateTime.utc().toISO();
DateTime.local().setZone('Asia/Tokyo').toISO();
Каждый вызов отражает разное смещение и представление времени.
ISO-строки часто применяются при:
Пример сериализации:
JSON.stringify({
createdAt: DateTime.now().toISO()
});
При передаче данных важно учитывать, что:
Поэтому параметры suppressMilliseconds и
includeOffset часто используются для адаптации строки под
внешний контракт.
Если исходный объект содержит только дату:
const dt = DateTime.fromObject({ year: 2026, month: 5, day: 23 });
dt.toISO();
Результат:
2026-05-23T00:00:00.000+06:00
Luxon автоматически добавляет нулевое время.
Если объект создан не полностью (например, отсутствуют часы или
минуты), Luxon нормализует значения до стандартного времени
00:00:00, что гарантирует корректность ISO-строки.
Метод toISO() является базовым инструментом сериализации
времени в Luxon и используется как основной способ получения
машинно-читаемого представления даты и времени, совместимого с
большинством современных систем обработки данных.
Он обеспечивает строгую стандартизацию формата, предсказуемость
вывода и гибкость настройки уровня детализации без изменения внутреннего
представления DateTime объекта.