Как получить метку времени (timestamp) в JavaScript? Все способы и примеры
Что такое timestamp и зачем он нужен
Timestamp (метка времени) — это целое число, представляющее количество миллисекунд (или секунд), прошедших с 1 января 1970 года 00:00:00 UTC (так называемая Unix-эпоха). Это универсальный формат для хранения дат, не зависящий от часовых поясов и региональных настроек.
Основные способы получения timestamp в миллисекундах
1. Date.now() — самый современный и быстрый способ (ES5, 2009 год)
const timestamp = Date.now();
console.log(timestamp); // 1729852200000 (пример)
Это статический метод, не требует создания объекта Date. Работает во всех современных браузерах и Node.js. Рекомендуется для большинства задач.
2. new Date().getTime() — классический способ
const timestamp = new Date().getTime();
console.log(timestamp); // 1729852200000
Сначала создаётся объект Date, затем вызывается метод getTime(). Немного медленнее, чем Date.now(), но даёт тот же результат.
3. new Date().valueOf() — неявный вызов
const timestamp = new Date().valueOf();
console.log(timestamp); // 1729852200000
Метод valueOf() вызывается автоматически при числовом преобразовании объекта Date. Можно использовать, но менее читаемо.
4. Унарный плюс +new Date() — короткая запись
const timestamp = +new Date();
console.log(timestamp); // 1729852200000
Оператор "+" вызывает valueOf(), преобразуя объект в число. Компактно, но может сбивать с толку новичков.
Как получить timestamp в секундах
Некоторые API (например, PHP, Firebase) ожидают timestamp в секундах. Для этого разделите миллисекунды на 1000:
// В секундах (с дробной частью)
const seconds = Date.now() / 1000;
console.log(seconds); // 1729852200.123
// Целое число секунд (отбрасываем миллисекунды)
const secondsInt = Math.floor(Date.now() / 1000);
console.log(secondsInt); // 1729852200
Сравнение производительности
В среде Node.js и современных браузерах Date.now() работает быстрее всех остальных методов, так как не требует создания объекта. Вот примерный бенчмарк:
Date.now()— ~150 млн операций/секnew Date().getTime()— ~80 млн операций/сек+new Date()— ~70 млн операций/секnew Date().valueOf()— ~60 млн операций/сек
Но для обычных задач разница незаметна. Выбирайте по читаемости кода.
Важные нюансы
- Часовой пояс не влияет на timestamp — он всегда считается от UTC. Если вам нужно получить локальное время, используйте методы
getHours(),getMinutes()и т.д. объекта Date. - Точность — JavaScript timestamp содержит миллисекунды. Для высокоточных измерений используйте
performance.now()(до микросекунд), но он не подходит для хранения дат. - Безопасность — timestamp от клиента можно подделать. Для серверных приложений всегда используйте время на стороне сервера.
Полный пример использования
// Получаем timestamp
const now = Date.now();
// Создаём читаемую дату из timestamp
const date = new Date(now);
console.log(date.toISOString()); // "2024-10-25T11:30:00.000Z"
// Проверяем, прошло ли 5 минут
const fiveMinutesAgo = Date.now() - 5 * 60 * 1000;
if (someTimestamp > fiveMinutesAgo) {
console.log('Событие произошло меньше 5 минут назад');
}
Итоговая рекомендация
Используйте Date.now() для получения timestamp в миллисекундах. Если нужно в секундах — делите на 1000 и округляйте. Это самый простой, быстрый и понятный способ.
Альтернативный подход: работа с датами через библиотеки
Если вы работаете над крупным проектом или часто манипулируете датами, рекомендую рассмотреть специализированные библиотеки. Они решают множество проблем, связанных с часовыми поясами, форматированием и парсингом.
Пример с day.js (лёгкая библиотека, 2KB)
// Установка: npm install dayjs
import dayjs from 'dayjs';
// Получить timestamp
const timestamp = dayjs().valueOf(); // миллисекунды
const timestampSec = dayjs().unix(); // секунды
// Работа с датами
const date = dayjs('2024-10-25');
const diff = dayjs().diff(date, 'day'); // разница в днях
console.log(diff); // например, 0 (если сегодня 25 октября)
Пример с date-fns (модульная библиотека)
// Установка: npm install date-fns
import { getTime, format, differenceInDays } from 'date-fns';
const timestamp = getTime(new Date());
console.log(timestamp); // 1729852200000
const formatted = format(new Date(), 'yyyy-MM-dd HH:mm:ss');
console.log(formatted); // "2024-10-25 14:30:00"
const daysPassed = differenceInDays(new Date(), new Date(2024, 0, 1));
console.log(daysPassed); // количество дней с 1 января 2024
Когда использовать библиотеки
- Когда нужно часто конвертировать даты между часовыми поясами
- Для сложных расчётов (добавление месяцев, кварталов)
- Для локализации (вывод дат на разных языках)
- Если проект уже использует одну из этих библиотек
Но если вам нужен просто timestamp — нативный Date.now() справится отлично без лишних зависимостей.
Ответов пока нет.
Войдите чтобы оставить ответ