ToISOString: примеры (JAVASCRIPT)

Полное руководство по методу toISOString в JavaScript
Раздел: Дата и время, Форматирование
toISOString: String

Описание функции toISOString

Метод toISOString() принадлежит объектам Date в JavaScript. Он возвращает строковое представление даты и времени в формате ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ).

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

Метод не принимает никаких аргументов.

Возвращаемое значение — строка в расширенном формате ISO 8601. Формат включает:

  • Год: 4 цифры.
  • Месяц и день: по 2 цифры, разделенные дефисом.
  • Символ разделителя: буква 'T'.
  • Время: часы, минуты, секунды и миллисекунды (2 цифры каждая, разделенные двоеточиями). Миллисекунды указываются после точки.
  • Суффикс временной зоны: буква 'Z', означающая время по UTC (время по Гринвичу).

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

Примеры базового использования

Создание строки ISO для текущей даты и времени.

const now = new Date();
console.log(now.toISOString());
"2024-01-15T12:30:45.123Z"

Использование для конкретной даты.

const specificDate = new Date('2023-05-20');
console.log(specificDate.toISOString());
"2023-05-20T00:00:00.000Z"

Дата до нашей эры (отрицательный год).

const bcDate = new Date('-000001');
console.log(bcDate.toISOString());
"-000001-12-31T23:58:45.224Z"

Альтернативные функции в JavaScript

  • toString(): возвращает строку с датой и временем в читаемом формате на английском языке, учитывая локальную временную зону. Не подходит для стандартизированного обмена данными.
    new Date().toString();
    "Mon Jan 15 2024 15:30:45 GMT+0300 (Москва, стандартное время)"
  • toUTCString(): возвращает строку с датой и временем по UTC в читаемом формате.
    new Date().toUTCString();
    "Mon, 15 Jan 2024 12:30:45 GMT"
  • toJSON(): при вызове у объекта Date автоматически использует toISOString(). Полезен при сериализации объектов JSON.
    JSON.stringify({ date: new Date() });
    "{\"date\":\"2024-01-15T12:30:45.123Z\"}"
  • Методы для конкретных компонентов (getFullYear, getMonth и т.д.): используются для получения отдельных частей даты для построения кастомных строковых форматов.

Типичные ошибки

Ошибка 1: Вызов метода для невалидного объекта Date. Метод выбрасывает исключение RangeError.

const invalidDate = new Date('invalid-string');
console.log(invalidDate.toISOString());
Uncaught RangeError: Invalid time value

Ошибка 2: Попытка использовать метод для значения, которое не является объектом Date. Ошибка TypeError.

const num = 123456;
console.log(num.toISOString());
Uncaught TypeError: num.toISOString is not a function

Ошибка 3: Непонимание того, что время всегда возвращается в UTC. Это может привести к неверной интерпретации данных при отображении пользователю без конвертации.

const localDate = new Date(2023, 11, 31, 23, 59); // 31 декабря 2023, 23:59 по локальной зоне
console.log(localDate.toISOString()); // В Москве (UTC+3) это будет...
"2023-12-31T20:59:00.000Z" // 31 декабря, 20:59 UTC

Изменения в последних версиях

Метод toISOString() был стандартизирован в ECMAScript 5 (ES5) и не претерпел значительных изменений в последующих версиях ECMAScript. Его поведение остается стабильным.

Важное уточнение, касающееся среды выполнения: в спецификации ECMAScript 2019 (ES10) были уточнены некоторые аспекты форматирования, связанные с представлением лет и миллисекунд, но это не повлияло на общий формат вывода для валидных дат в диапазоне от -273790 до 273790.

Разработчикам рекомендуется проверять поддержку в целевых браузерах, хотя на сегодняшний день метод поддерживается повсеместно.

Расширенные примеры использования

Пример 1: Логирование событий с временными метками в стандартном формате для последующего анализа.

Пример javascript
function logEvent(message) {
    const timestamp = new Date().toISOString();
    console.log(`[${timestamp}] ${message}`);
}
logEvent('Пользователь вошел в систему');
"[2024-01-15T12:30:45.123Z] Пользователь вошел в систему"

Пример 2: Создание уникального идентификатора на основе времени (не рекомендуется для высоконагруженных систем из-за возможных коллизий).

Пример javascript
function generateTimeBasedId() {
    return `id_${new Date().toISOString().replace(/[^0-9]/g, '')}`;
}
console.log(generateTimeBasedId());
"id_20240115123045123"

Пример 3: Проверка, находится ли дата в допустимом диапазоне для метода toISOString().

Пример javascript
function isDateValidForISO(date) {
    try {
        date.toISOString();
        return true;
    } catch (e) {
        return false;
    }
}
console.log(isDateValidForISO(new Date('100000-01-01')));
console.log(isDateValidForISO(new Date('invalid')));
true
false

Пример 4: Преобразование строки ISO обратно в объект Date и сравнение.

Пример javascript
const originalDate = new Date();
const isoString = originalDate.toISOString();
const restoredDate = new Date(isoString);
console.log(originalDate.getTime() === restoredDate.getTime());
true

Пример 5: Использование в API запросах для отправки данных на сервер.

Пример javascript
// Отправка данных формы с датой
const formData = {
    eventName: 'Встреча',
    eventDate: new Date('2024-12-25T14:00:00').toISOString()
};
// fetch('/api/event', { method: 'POST', body: JSON.stringify(formData) });
console.log(JSON.stringify(formData));
"{\"eventName\":\"Встреча\",\"eventDate\":\"2024-12-25T11:00:00.000Z\"}"

Аналоги в других языках программирования

PHP: Метод DateTime::format с константой DateTime::ATOM или форматной строкой 'c'.

$date = new DateTime();
echo $date->format('c'); // 'c' - формат ISO 8601
echo $date->format(DateTime::ATOM);
2024-01-15T15:30:45+03:00
Отличие: по умолчанию включает смещение временной зоны, а не 'Z'.

Python: Метод isoformat() у объектов datetime.

from datetime import datetime, timezone
now_utc = datetime.now(timezone.utc)
print(now_utc.isoformat())
2024-01-15T12:30:45.123456+00:00
Отличие: может включать микросекунды и возвращает смещение +00:00 вместо 'Z'.

MySQL: Функция DATE_FORMAT() или возврат даты в стандартном формате.

SELECT NOW(), DATE_FORMAT(NOW(), '%Y-%m-%dT%TZ');
2024-01-15 15:30:45, 2024-01-15T15:30:45Z
Важно: NOW() возвращает локальное время сервера. Для UTC используйте UTC_TIMESTAMP().

C#: Метод ToString("o") или ToString("s") стандартного формата.

DateTime now = DateTime.UtcNow;
string isoString = now.ToString("o"); // "Round-trip" формат
string sortableString = now.ToString("s"); // Сортируемый формат
2024-01-15T12:30:45.1234567Z, 2024-01-15T12:30:45
Формат "o" (round-trip) сохраняет полную точность и информацию о временной зоне.

JS toISOString function comments

En
ToISOString Returns a string in simplified extended ISO format (ISO 8601)