> Как работает метод getTime у объекта Date в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: ITFB
Стек: JavaScript
> Пример ответа
Короткий ответ
getTime() возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 UTC (эпоха Unix) до момента, который представляет объект Date. Это число типа Number (включая отрицательные значения для дат до 1970 года). Метод не зависит от локального часового пояса - он всегда возвращает абсолютное значение времени в UTC.
Подробное объяснение
Внутри объект Date хранит одно число - timestamp (целое количество миллисекунд). getTime() - это геттер этого внутреннего значения. Ключевые особенности:
- Основание эпохи - 1 января 1970, 00:00:00 UTC. Для дат до этой точки возвращается отрицательное число.
- Точность - до миллисекунды. До ES2020 точность зависела от платформы, но спецификация требует миллисекундную точность.
- Разница с другими методами -
getTime()возвращает UTC-значение, в отличие отgetHours(),getMinutes()и т.д., которые возвращают значения в локальном часовом поясе. - Эквивалент -
valueOf()возвращает то же самое число, поэтомуdate.getTime()неявно вызывается при арифметических операциях и сравнениях. - Обратимость - число из
getTime()можно передать в конструкторnew Date(timestamp)или вDate.prototype.setTime()для восстановления исходного момента времени.
На практике
getTime() используется для:
- сравнения дат (например,
date1.getTime() > date2.getTime()); - вычисления разницы между датами в миллисекундах;
- передачи дат в API, где требуется Unix timestamp;
- кэширования или хранения дат в числовом виде (например, в
localStorageили базе данных); - сортировки массивов дат.
Важно помнить: Date.now() - это статический эквивалент new Date().getTime(), но без создания объекта.
Пример кода
JAVASCRIPTconst date = new Date('2024-03-15T12:00:00Z');console.log(date.getTime()); // 1710504000000// Отрицательное значение для даты до 1970const oldDate = new Date('1969-07-20T20:17:00Z');console.log(oldDate.getTime()); // -14182980// Сравнение датconst d1 = new Date('2024-01-01');const d2 = new Date('2024-06-01');console.log(d1.getTime() < d2.getTime()); // true// Разница в миллисекундахconst diff = d2.getTime() - d1.getTime();console.log(diff); // 13132800000// Восстановление даты из timestampconst restored = new Date(d1.getTime());console.log(restored.toISOString()); // '2024-01-01T00:00:00.000Z'// Эквивалентность с valueOfconsole.log(date.getTime() === date.valueOf()); // true
Как отвечать на собеседовании
Начните с определения - метод возвращает timestamp в миллисекундах от эпохи Unix. Затем подчеркните, что значение абсолютно и не зависит от часового пояса. Упомяните, что это внутреннее представление даты в JavaScript. Если спросят про точность - скажите про миллисекунды и про то, что до ES2020 были платформенные ограничения. Можно добавить про связь с Date.now() и valueOf(). Для уровня senior стоит упомянуть edge case: отрицательные значения для дат до 1970 года и что getTime() - это не то же самое, что getUTCTime() (такого метода нет, но есть Date.UTC() для создания даты из UTC-компонентов).
Что проверяет интервьюер
Интервьюер оценивает:
- понимание внутреннего представления дат в JavaScript (число, а не объект с полями);
- знание разницы между локальными методами (
getHours()) и абсолютными (getTime()); - осведомлённость о проблемах точности и платформенных ограничениях;
- умение использовать метод для практических задач (сравнение, сериализация);
- знание смежных API:
Date.now(),valueOf(),setTime(),Date.UTC().
Типичные ошибки
- Путаница между
getTime()иgetUTCHours()- первое возвращает абсолютное число, второе - компонент времени. - Предположение, что
getTime()возвращает секунды. Это миллисекунды, поэтому для Unix-времени в секундах нужно делить на 1000. - Использование
getTime()для получения локального времени - это неверно, метод всегда возвращает UTC-значение. - Забывают, что сравнение дат через
<и>работает неявно черезvalueOf(), поэтому явный вызовgetTime()не обязателен, но улучшает читаемость. - Ожидание, что
new Date('1970-01-01')вернёт 0 - на самом деле вернёт 0 только для'1970-01-01T00:00:00Z', иначе будет смещение на часовой пояс.
> Похожие задачи по frontend
В чем проблема использования колбэков в JavaScript
Как задать this явно для функции в JavaScript
Как соединить фиксированное количество строк через разделитель в JavaScript
Как выполняется функция с учетом хостинга в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью