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: Логирование событий с временными метками в стандартном формате для последующего анализа.
function logEvent(message) {
const timestamp = new Date().toISOString();
console.log(`[${timestamp}] ${message}`);
}
logEvent('Пользователь вошел в систему');"[2024-01-15T12:30:45.123Z] Пользователь вошел в систему"
Пример 2: Создание уникального идентификатора на основе времени (не рекомендуется для высоконагруженных систем из-за возможных коллизий).
function generateTimeBasedId() {
return `id_${new Date().toISOString().replace(/[^0-9]/g, '')}`;
}
console.log(generateTimeBasedId());"id_20240115123045123"
Пример 3: Проверка, находится ли дата в допустимом диапазоне для метода toISOString().
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 и сравнение.
const originalDate = new Date();
const isoString = originalDate.toISOString();
const restoredDate = new Date(isoString);
console.log(originalDate.getTime() === restoredDate.getTime());true
Пример 5: Использование в API запросах для отправки данных на сервер.
// Отправка данных формы с датой
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) сохраняет полную точность и информацию о временной зоне.