> Как работает метод 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(), но без создания объекта.

Пример кода

JAVASCRIPT
const date = new Date('2024-03-15T12:00:00Z');
console.log(date.getTime()); // 1710504000000
// Отрицательное значение для даты до 1970
const 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
// Восстановление даты из timestamp
const restored = new Date(d1.getTime());
console.log(restored.toISOString()); // '2024-01-01T00:00:00.000Z'
// Эквивалентность с valueOf
console.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', иначе будет смещение на часовой пояс.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью