Learn JavaScript

toISOString() - ISO-строка даты в JavaScript

toISOString() возвращает строку с датой в формате ISO 8601. Метод не меняет объект Date, а просто преобразует его в строку по UTC.

Синтаксис

Базовая запись выглядит так:

date.toISOString()

Где:

  • date - это объект Date

У метода нет аргументов.

Что возвращает toISOString()

Метод возвращает строку в формате:

YYYY-MM-DDTHH:mm:ss.sssZ

Пример:

const date = new Date(Date.UTC(2025, 0, 15, 11, 30, 45, 123));

console.log(typeof date.toISOString()); // "string"
console.log(date.toISOString()); // "2025-01-15T11:30:45.123Z"

Здесь:

  • YYYY - год
  • MM - месяц
  • DD - день месяца
  • THH:mm:ss.sss - время
  • Z - признак того, что строка записана по UTC

Простой пример

const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(date.toISOString()); // "2025-01-15T11:30:45.123Z"

Здесь объект даты был создан из строки с часовым поясом +03:00, но toISOString() всё равно вернул значение в UTC.

toISOString() всегда работает по UTC

Это главный нюанс метода.

toISOString() не использует локальное время пользователя. Он всегда возвращает дату и время именно в UTC.

const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(date.getHours()); // 14
console.log(date.getUTCHours()); // 11
console.log(date.toISOString()); // "2025-01-15T11:30:45.123Z"

Поэтому строка из toISOString() удобна для API, баз данных, логов и обмена датами между разными системами.

У строки всегда есть Z в конце

Это полезно запомнить.

Символ Z в конце означает, что время записано в часовом поясе UTC.

const date = new Date(Date.UTC(2025, 0, 15, 11, 30, 45, 123));

console.log(date.toISOString()); // "2025-01-15T11:30:45.123Z"

Если вам нужна строка в локальном часовом поясе, toISOString() для этого не подходит.

Миллисекунды в строке всегда дополняются до трёх цифр

Это ещё одна полезная деталь формата.

const date = new Date(Date.UTC(2025, 0, 15, 11, 30, 45, 7));

console.log(date.toISOString()); // "2025-01-15T11:30:45.007Z"

Даже если миллисекунды равны 7, в строке они будут записаны как 007.

toISOString() не меняет исходную дату

Это важно не перепутать с методами вроде setTime() или setUTCHours().

toISOString() только читает текущее значение даты и возвращает строку.

const date = new Date(Date.UTC(2025, 0, 15, 11, 30, 45, 123));
const before = date.getTime();
const iso = date.toISOString();

console.log(iso); // "2025-01-15T11:30:45.123Z"
console.log(date.getTime() === before); // true

После вызова метода объект Date остаётся тем же самым.

Чем toISOString() отличается от toString()

Эти методы часто путают, потому что оба возвращают строку.

  • toISOString() возвращает дату в стандартизированном формате ISO 8601
  • toString() возвращает строку в локальном часовом поясе пользователя
const date = new Date(Date.UTC(2025, 0, 15, 11, 30, 45, 123));

console.log(date.toISOString()); // "2025-01-15T11:30:45.123Z"
console.log(date.toString()); // локальная строка с часовым поясом

toISOString() особенно удобен, когда нужен предсказуемый и одинаковый формат независимо от устройства пользователя.

Чем toISOString() отличается от toUTCString()

Оба метода работают с UTC, но формат у них разный.

  • toISOString() возвращает строку в формате ISO 8601
  • toUTCString() возвращает более человекочитаемую строку по UTC
const date = new Date(Date.UTC(2025, 0, 15, 11, 30, 45, 123));

console.log(date.toISOString()); // "2025-01-15T11:30:45.123Z"
console.log(date.toUTCString()); // "Wed, 15 Jan 2025 11:30:45 GMT"

Если строка нужна для передачи в коде, JSON, API или базе данных, чаще выбирают именно toISOString().

toISOString() удобно использовать при отправке данных

Это один из самых частых сценариев.

const createdAt = new Date();

const payload = {
  createdAt: createdAt.toISOString(),
};

console.log(payload);

Так вы получаете единый формат даты, который удобно хранить и передавать между клиентом и сервером.

Invalid Date вызывает ошибку

Это очень важный момент.

Если объект Date невалидный, toISOString() не вернёт NaN и не вернёт строку "Invalid Date". Он выбросит ошибку RangeError.

const date = new Date("invalid");

console.log(String(date)); // "Invalid Date"
console.log(date.toISOString()); // RangeError

Поэтому перед вызовом метода полезно убедиться, что дата корректна.

Например так:

const date = new Date("invalid");

if (!Number.isNaN(date.getTime())) {
  console.log(date.toISOString());
}

Когда это полезно

toISOString() особенно удобен, когда:

  • нужно получить строку даты в стабильном формате
  • вы отправляете дату в API или сохраняете её в базе данных
  • важно избежать зависимости от локального часового пояса пользователя
  • нужна дата, которую потом легко разобрать обратно

Пример:

const expiresAt = new Date(Date.UTC(2025, 0, 31, 23, 59, 59, 999));

console.log(expiresAt.toISOString()); // "2025-01-31T23:59:59.999Z"

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

Ожидать локальное время вместо UTC

const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(date.toISOString()); // "2025-01-15T11:30:45.123Z"

Метод всегда возвращает строку по UTC.

Игнорировать Z в конце строки

const date = new Date(Date.UTC(2025, 0, 15, 11, 30, 45, 123));

console.log(date.toISOString()); // "2025-01-15T11:30:45.123Z"

Z означает UTC, и это важно учитывать при отображении даты пользователю.

Думать, что метод меняет сам объект Date

const date = new Date(Date.UTC(2025, 0, 15, 11, 30, 45, 123));

date.toISOString();

console.log(date.toISOString()); // "2025-01-15T11:30:45.123Z"

Метод только создаёт строку и не изменяет дату.

Путать toISOString() и toUTCString()

const date = new Date(Date.UTC(2025, 0, 15, 11, 30, 45, 123));

console.log(date.toISOString()); // "2025-01-15T11:30:45.123Z"
console.log(date.toUTCString()); // "Wed, 15 Jan 2025 11:30:45 GMT"

Оба метода работают с UTC, но формат результата разный.

Вызывать toISOString() у Invalid Date

const date = new Date("invalid");

console.log(date.toISOString()); // RangeError

Для невалидной даты этот метод выбрасывает ошибку.

Быстрая памятка

  • toISOString() вызывается у объекта Date
  • метод не принимает аргументы
  • результатом является строка
  • строка всегда записывается по UTC
  • в конце строки стоит Z
  • формат обычно выглядит как YYYY-MM-DDTHH:mm:ss.sssZ
  • метод не изменяет исходный объект Date
  • для локальной строки чаще используют toString()
  • для невалидной даты toISOString() выбрасывает RangeError

Коротко

toISOString() в JavaScript нужен, чтобы получить дату в виде строки стандартного формата ISO 8601. Главное, что стоит запомнить: метод ничего не меняет в объекте Date, всегда работает по UTC, возвращает строку с Z в конце и выбрасывает RangeError, если дата невалидна.