Формат ISO 8601 — стандарт представления даты и времени, который широко используется в JavaScript-экосистеме и является базовым для сериализации времени в Day.js. Он задаёт однозначную структуру строки, устраняя проблемы локальных форматов и неоднозначностей вроде «03/04/2026».
В Day.js работа с ISO строится вокруг двух ключевых операций:
Day.js по умолчанию использует immutable-модель: каждая операция возвращает новый экземпляр объекта, не изменяя исходный.
Метод toISOString() возвращает дату в строгом формате
UTC:
import dayjs from 'dayjs';
const now = dayjs();
const iso = now.toISOString();
console.log(iso);
Результат всегда соответствует шаблону:
YYYY-MM-DDTHH:mm:ss.sssZ
Ключевые особенности:
Z указывает на нулевое смещение часового
поясаDate.prototype.toISOString()В отличие от локальных форматов, ISO-строка не зависит от настроек системы и одинаково интерпретируется в любом окружении.
Day.js автоматически распознаёт ISO 8601 при передаче строки в конструктор:
import dayjs from 'dayjs';
const date = dayjs('2026-05-23T14:30:00Z');
console.log(date.format());
Поддерживаются основные варианты ISO:
2026-05-23T14:30:00Z2026-05-23T14:30:00.123Z2026-05-23T14:30:00+03:002026-05-23При разборе Day.js:
Day.js хранит время в виде Unix timestamp (миллисекунды с эпохи Unix). ISO-строка является лишь представлением этого значения.
Пример:
const local = dayjs();
const iso = local.toISOString();
console.log(local.format('YYYY-MM-DD HH:mm:ss'));
console.log(iso);
Разница принципиальная:
format() показывает локальное времяtoISOString() всегда возвращает UTCЭто приводит к важному следствию: одинаковый timestamp может выглядеть по-разному в разных форматах.
Для управления временными зонами в контексте ISO часто используется плагин UTC:
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
dayjs.extend(utc);
const utcDate = dayjs.utc().toISOString();
console.log(utcDate);
После подключения utc появляется возможность явно
работать с UTC-режимом:
dayjs.utc() — создание даты в UTCtoISOString() — возвращение уже нормализованного
значенияХотя toISOString() является каноническим методом,
ISO-строки часто формируются вручную через format() для
контроля структуры:
const d = dayjs();
const isoLike = d.format('YYYY-MM-DDTHH:mm:ssZ');
console.log(isoLike);
Особенности:
T задаётся как литералZ в format() — это не UTC-знак, а смещение
часового поясаЕсли требуется строгий UTC ISO, необходимо комбинировать с
utc():
import utc from 'dayjs/plugin/utc';
dayjs.extend(utc);
const isoUtc = dayjs.utc().format('YYYY-MM-DDTHH:mm:ss[Z]');
Квадратные скобки фиксируют литерал Z.
При работе с API часто приходят строки ISO, которые могут быть в разных вариантах. Day.js выполняет нормализацию:
const a = dayjs('2026-05-23T00:00:00Z');
const b = dayjs('2026-05-23T03:00:00+03:00');
console.log(a.valueOf() === b.valueOf());
Обе даты могут быть равны по timestamp, несмотря на различное представление.
Ключевой принцип:
Day.js не выбрасывает исключения при невалидной дате, а помечает объект как invalid:
const d = dayjs('invalid-date');
console.log(d.isValid());
При работе с ISO это важно, поскольку:
isValid()ISO-формат поддерживает точность до миллисекунд:
const precise = dayjs().millisecond(123).toISOString();
console.log(precise);
Формат:
YYYY-MM-DDTHH:mm:ss.123Z
Если миллисекунды равны нулю, они всё равно могут отображаться в стандартной сериализации.
ISO и Unix timestamp являются взаимозаменяемыми представлениями одной сущности:
const d = dayjs();
console.log(d.valueOf());
console.log(d.toISOString());
Различия:
Внутри Day.js оба формата преобразуются в одну и ту же временную точку.
При использовании ISO-формата в Day.js часто возникают типовые ошибки:
Игнорирование UTC в toISOString()
Неправильное использование Z в
format()
Смешивание локальных и UTC-дат
Отсутствие проверки isValid()
В прикладных системах ISO 8601 используется как универсальный формат передачи времени между:
Day.js выступает как слой нормализации, обеспечивая:
Это позволяет исключить зависимость от локальных настроек окружения и гарантировать предсказуемость временных значений во всех слоях приложения.