Как получить метку времени (timestamp) в JavaScript?
Краткий ответ: используйте Date.now()
Самый простой и быстрый способ получить текущую метку времени в миллисекундах (с 1 января 1970 года UTC) — это статический метод Date.now(). Он доступен во всех современных браузерах и средах Node.js.
// Получаем текущий timestamp в миллисекундах
const timestampMs = Date.now();
console.log(timestampMs); // Например: 1706873400000
Подробное объяснение
Метка времени (timestamp) в JavaScript по умолчанию измеряется в миллисекундах (1 секунда = 1000 миллисекунд). Это число представляет собой количество миллисекунд, прошедших с полуночи 1 января 1970 года по UTC (эпоха Unix).
Вот три основных способа получить timestamp:
Date.now()— рекомендуемый способconst timestamp = Date.now(); // Возвращает число (Number)Плюсы: коротко, быстро (не создает новый объект Date), легко читается.
new Date().getTime()— классический способconst timestamp = new Date().getTime(); // Работает так же, но создает лишний объект DateЭтот метод полезен, если у вас уже есть объект Date, и вам нужно получить его timestamp:
const myDate = new Date('2024-01-01'); const timestamp = myDate.getTime(); // 1704067200000- Оператор
+перед Date (не рекомендуется для читаемости)const timestamp = +new Date(); // Работает, но выглядит неочевидно
Unix timestamp в секундах
Если вам нужен классический Unix timestamp (в секундах, как в PHP или базах данных), просто разделите миллисекунды на 1000 и округлите:
const unixTimestampSeconds = Math.floor(Date.now() / 1000);
console.log(unixTimestampSeconds); // Например: 1706873400
Используйте Math.floor(), а не Math.round(), чтобы timestamp всегда указывал на текущую или прошедшую секунду, а не на будущую.
Как это работает под капотом?
Date.now()— это статический метод, эквивалентныйnew Date().getTime(), но без создания объекта.- Значение зависит от системных часов пользователя. Его можно подделать, если пользователь изменит время на компьютере.
- Точность: в большинстве браузеров — до миллисекунды. В старых IE — до 15 мс.
Пример: замер времени выполнения
const start = Date.now();
// Какой-то код
for (let i = 0; i < 1000000; i++) {
Math.sqrt(i);
}
const end = Date.now();
console.log(`Операция заняла ${end - start} мс`);
Важное замечание
Не путайте timestamp с объектом Date. Timestamp — это просто число, с которым легко работать: сравнивать, складывать, вычитать. Для форматирования в человекочитаемую строку используйте методы объекта Date:
const now = new Date(Date.now());
console.log(now.toISOString()); // "2024-02-02T12:30:00.000Z"
console.log(now.toLocaleString('ru-RU')); // "02.02.2024, 15:30:00"
<<Альтернативный подход: performance.now() для высокоточных замеров
Если вам нужна не календарная дата, а именно интервалы времени с высокой точностью (например, для бенчмарков или анимаций), используйте performance.now(). Этот метод доступен в браузерах и Node.js (через модуль perf_hooks).
// В браузере:
const start = performance.now();
// ... код ...
const end = performance.now();
console.log(`Время: ${end - start} миллисекунд`); // Точность до долей миллисекунды
Отличия от Date.now():
performance.now()возвращает время с точностью до микросекунд (в некоторых средах — до наносекунд).- Оно монотонно (не зависит от системных часов). Если пользователь переведет часы назад,
Date.now()"откатится", аperformance.now()продолжит расти. - Начало отсчета — не 1970 год, а момент загрузки страницы (или запуска процесса в Node.js). Поэтому его нельзя использовать как абсолютную метку времени для сохранения в БД.
Когда что использовать?
- Date.now() — для сохранения времени события, создания расписаний, работы с датами.
- performance.now() — для измерения производительности кода, игровых циклов, высокоточных таймеров.
- new Date().getTime() — когда нужно получить timestamp из существующего объекта Date.
// Пример: замер с performance.now()
const t0 = performance.now();
heavyComputation();
const t1 = performance.now();
console.log(`Выполнение заняло ${(t1 - t0).toFixed(2)} мс`); Ответов пока нет.
Войдите чтобы оставить ответ