Как получить временную метку в JavaScript?
Я хочу получить одно число, которое представляет текущую дату и время, подобно Unix-метке времени.
В JavaScript вы можете получить Unix-метку времени с помощью Date.now(), которая возвращает текущее время в виде количества миллисекунд с 1 января 1970 года. Для получения секунд (вместо миллисекунд) можно использовать Math.floor(Date.now() / 1000) или Math.round(new Date().getTime() / 1000). Наиболее эффективным методом является Date.now(), которая предоставляет одно число, представляющее текущую дату и время в формате Unix-метки времени.
Содержание
- Основы работы с метками времени в JavaScript
- Метод Date.now()
- Альтернативные методы
- Преобразование между форматами
- Практические примеры
- Рекомендации по производительности
Основы работы с метками времени в JavaScript
Unix-метка времени — это одно число, представляющее текущее время в виде количества секунд или миллисекунд, прошедших с 1 января 1970 года (UTC). JavaScript предоставляет несколько способов генерации такой метки времени, при наиболее современным и эффективным подходом является Date.now().
Объект Date в JavaScript встроен в язык и не требует внешних библиотек или фреймворков. Это делает генерацию меток времени чрезвычайно простой и надежной во всех современных браузерах и средах JavaScript.
Метод Date.now()
Метод Date.now() — это самый простой способ получить метку времени в JavaScript. Он возвращает текущее время в виде количества миллисекунд с эпохи Unix.
const timestamp = Date.now();
console.log(timestamp); // Пример: 1704067200000
Основные характеристики Date.now():
- Возвращает миллисекунды с 1970-01-01 00:00:00 UTC
- Не требует создания нового объекта
Date - Работает во всех современных браузерах и Node.js
- Более производителен, чем альтернативные методы
- Возвращает тип
Number
Для получения Unix-меток времени в секундах (традиционный формат) просто разделите на 1000:
const unixTimestamp = Math.floor(Date.now() / 1000);
console.log(unixTimestamp); // Пример: 1704067200
Альтернативные методы
Хотя Date.now() является предпочтительным методом, JavaScript предлагает другие способы работы с метками времени для разных случаев использования.
Использование new Date().getTime()
Этот метод создает новый объект Date и вызывает его метод getTime():
const timestamp = new Date().getTime();
console.log(timestamp); // То же, что и Date.now()
Сравнение с Date.now():
- Создает новый объект
Dateпри каждом вызове (менее эффективно) - Функционально эквивалентен
Date.now() - Полезен, когда у вас уже есть объект
Date
Использование new Date().valueOf()
Метод valueOf() также возвращает метку времени:
const timestamp = new Date().valueOf();
console.log(timestamp); // То же, что и выше
Использование унарного плюса
Унарный оператор плюса в JavaScript может преобразовать объект Date в метку времени:
const timestamp = +new Date();
console.log(timestamp);
Это лаконичный, но потенциально менее читаемый подход.
Преобразование между форматами
Миллисекунды в секунды
Для преобразования меток времени из миллисекунд в секунды:
const milliseconds = Date.now();
const seconds = Math.floor(milliseconds / 1000);
// или
const seconds = Math.round(milliseconds / 1000);
Секунды в миллисекунды
Преобразование обратно из секунд в миллисекунды:
const seconds = 1704067200;
const milliseconds = seconds * 1000;
Объект Date в метку времени
Преобразование объекта Date в метку времени:
const date = new Date('2024-01-01');
const timestamp = date.getTime();
Метку времени в объект Date
Преобразование метки времени в объект Date:
const timestamp = 1704067200000;
const date = new Date(timestamp);
Практические примеры
Базовое создание метки времени
// Текущая метка времени в миллисекундах
const nowMs = Date.now();
// Текущая метка времени в секундах
const nowS = Math.floor(Date.now() / 1000);
console.log(`Миллисекунды: ${nowMs}`);
console.log(`Секунды: ${nowS}`);
Измерение производительности
const start = Date.now();
// Код для измерения
const end = Date.now();
const duration = end - start;
console.log(`Операция заняла ${duration}мс`);
Синхронизация времени на сервере
// Расчет разницы времени с сервером
const serverTime = 1704067200; // Метка времени сервера в секундах
const localTime = Math.floor(Date.now() / 1000);
const timeDiff = serverTime - localTime;
Форматирование даты с меткой времени
const timestamp = Date.now();
const date = new Date(timestamp);
const formatted = date.toISOString();
console.log(formatted); // "2024-01-01T00:00:00.000Z"
Рекомендации по производительности
Сравнение методов
| Метод | Производительность | Читаемость | Поддержка браузерами |
|---|---|---|---|
Date.now() |
⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | Отличная |
new Date().getTime() |
⭐⭐⭐ | ⭐⭐⭐⭐ | Отличная |
+new Date() |
⭐⭐⭐ | ⭐⭐ | Отличная |
Date.parse(new Date()) |
⭐ | ⭐⭐ | Хорошая |
Лучшие практики
- Используйте
Date.now()для критически важного по производительности кода — он примерно на 50-100% быстрее альтернатив - Кэшируйте метки времени, когда это возможно — если вам нужна одна и та же метка время несколько раз
- Учитывайте часовые пояса — все метки времени в JavaScript по умолчанию в UTC
- Обрабатывайте большие числа — метки времени могут превышать пределы 32-битных целых чисел в некоторых системах
Совместимость с браузерами
Date.now() поддерживается в:
- Internet Explorer 9+
- Все современные браузеры
- Node.js (все версии)
Для старых браузеров, которые не поддерживают Date.now(), можно использовать этот полифилл:
if (!Date.now) {
Date.now = function() {
return new Date().getTime();
};
}
Заключение
Основные выводы:
- Используйте
Date.now()для наиболее эффективной генерации меток времени - Делите на 1000 и используйте
Math.floor()для традиционных Unix-меток времени в секундах Date.now()быстрее и более читабелен, чем альтернативные методы- Метки времени в JavaScript всегда в UTC, что делает их идеальными для серверного взаимодействия
- Учитывайте совместимость с браузерами при работе со старыми системами
Рекомендации:
- Всегда используйте
Date.now(), если вам не нужно работать с существующими объектамиDate - Храните метки времени в миллисекундах для точности, преобразовывайте в секунды только при необходимости по требованиям API
- Добавьте преобразование часового пояса, если отображаете данные конечным пользователям
- Используйте единый формат меток времени во всем приложении
Связанные вопросы:
- Как отформатировать метку времени в читаемую дату? Используйте
new Date(timestamp).toLocaleString() - Как получить метку времени для конкретной даты? Используйте
new Date('2024-01-01').getTime() - Какое максимальное значение метки времени может обрабатывать JavaScript? JavaScript может обрабатывать метки времени до примерно 8.64 × 10^15 миллисекунд (год 275760 н.э.)