Техподдержка

Unix Timestamp: секунды против миллисекунд — почему дата показывает 1970

Если Unix timestamp превращается в дату около 1970, часто секунды прочитали как миллисекунды. Как отличить единицы измерения.

Короткий ответ

Если Unix timestamp даёт дату около 1970, значение часто толкуют в неверной единице.

Unix timestamp обычно в секундах, а JavaScript Date — обычно в миллисекундах.

Современный 10-значный timestamp часто в секундах, 13-значный — в миллисекундах. Если единицы не совпадают, может понадобиться умножить или разделить на 1000.

Вы перевели timestamp и попали в январь 1970. Часы почти никогда не сломаны. Число прочитали как миллисекунды, хотя оно было в секундах — или наоборот.

Что такое Unix timestamp?

Unix timestamp измеряет время с Unix epoch: 1970-01-01 00:00:00 UTC. Обычно это целые секунды. Тот же момент можно хранить в миллисекундах (секунды × 1000). Само число единицу не подписывает.

Секунды и миллисекунды: разница в 1000 раз

Одна секунда — это 1000 миллисекунд. Сравните 1720000000 и 1720000000000. Если первое — секунды, а второе — миллисекунды, это один момент. Прочитайте первое как миллисекунды — дата прыгнет к 1970.

Эти результаты UTC посчитаны по числам выше, а не угаданы.

Значение Вероятная единица Толкование (UTC)
1720000000 Секунды Современная дата как секунды: 2024-07-03 09:46:40 UTC
1720000000000 Миллисекунды Тот же момент как миллисекунды: 2024-07-03 09:46:40 UTC
1720000000 как миллисекунды Неверная единица Дата около 1970: 1970-01-20 21:46:40 UTC

Почему timestamp показывает 1970?

Если секунды принимают за миллисекунды, число в 1000 раз меньше нужного. JavaScript отсчитывает лишь короткий промежуток после Unix epoch, и дата остаётся в 1970:

const seconds = 1720000000;

new Date(seconds);
// 1970-01-20 21:46:40 UTC

new Date(seconds * 1000);
// 2024-07-03 09:46:40 UTC

Дата 1970 — это epoch плюс пара недель. Умножьте секунды на 1000, прежде чем передавать их в Date.

  • СЕКУНДЫ
  • 1720000000
  • МИЛЛИСЕКУНДЫ
  • 1720000000000
Один момент: секунды × 1000 = миллисекунды.
  • Значение в секундах
  • Ошибочно принято за миллисекунды
  • Дата около 1970
Секунды, прочитанные как миллисекунды, падают к Unix epoch.
Секунды или миллисекунды?

Если результат около 1970, сначала проверьте единицу timestamp, а не часовой пояс.

10 цифр — это секунды, а 13 — миллисекунды?

Для современных дат 10 цифр часто секунды, а 13 — миллисекунды. Это подсказка, не правило проверки. Число цифр зависит от диапазона времени; часть API хранит микросекунды или наносекунды. Подтвердите единицу документацией или датой, которая имеет смысл.

Почему это так часто в JavaScript

В JavaScript числовой Date — миллисекунды с epoch. Многие бэкенды, базы и Unix-инструменты по-прежнему хранят секунды. Передать секунды сразу в Date — частая ошибка:

const unixSeconds = 1720000000;

const wrong = new Date(unixSeconds);
const correct = new Date(unixSeconds * 1000);

wrong около 1970 (1970-01-20 21:46:40 UTC). correct — нужный современный момент (2024-07-03 09:46:40 UTC).

В других системах единицы могут быть другими

Другие языки, API и базы могут использовать секунды или миллисекунды. Некоторые хранят микросекунды или наносекунды. Не считайте, что язык всегда использует одну единицу — смотрите документацию. Если число в JSON, Форматирование и сравнение JSON поможет прочитать поле, но единицу не подскажет.

Как понять, в какой единице мой timestamp?

Проходите проверки по порядку. Одних цифр мало.

  1. Проверьте документацию API или базы данных.
  2. Посмотрите примерное число цифр.
  3. Сравните значение с правдоподобным современным timestamp.
  4. Проверьте значение как секунды и как миллисекунды.
  5. Посмотрите, имеет ли смысл получившаяся дата.

Если одно толкование даёт 1970, а другое — знакомую дату, причина в единице.

Частые ошибки с Unix timestamp

  • Секунды прочитаны как миллисекунды. Дата схлопывается к 1970, как в примере.
  • Миллисекунды прочитаны как секунды. Дата улетает далеко в будущее, или преобразование не удаётся.
  • Умножение на 1000 дважды. Значение, уже бывшее в миллисекундах, становится огромным, дата уходит на века вперёд.
  • Деление на 1000 дважды. Значение в секундах снова сжимается — снова около 1970.
  • Винить часовой пояс. Пояс может сдвинуть часы или календарный день. Он не превращает современный timestamp в 1970.
  • Считать отформатированную дату Unix timestamp. Значение вроде 2024-07-03T09:46:40Z — не число epoch. Разбирайте его как дату, не как секунды.

Часовой пояс вызывает проблему 1970?

Обычно нет. Пояс меняет отображаемые часы и иногда календарную дату около полуночи. Он не превращает современный Unix timestamp в 1970. Если результат — 1970, сначала проверьте секунды против миллисекунд.

Преобразовать и проверить Unix timestamp

NEXNARA Конвертер даты и времени может преобразовать Unix timestamp в браузере.

Вставьте Unix-секунды или миллисекунды, возьмите текущий timestamp, посмотрите UTC и местное время, переведите часовые пояса и отформатируйте дату. Автоопределение часто считает 10 цифр секундами, а 13 — миллисекундами; единицу всё равно можно выбрать вручную.

Само преобразование выполняется в браузере. Этот инструмент не отправляет даты и timestamp на сервер NEXNARA. Реклама и другие функции сайта по-прежнему используют сеть; это отдельно от преобразования.

Нужно проверить Unix timestamp? Откройте Конвертер даты и времени и сравните секунды с миллисекундами.

FAQ

Почему мой Unix timestamp показывает 1970?

Часто это секунды, прочитанные как миллисекунды. JavaScript обрабатывает гораздо меньшее число, поэтому дата оказывается сразу после 1970-01-01 00:00:00 UTC. Умножьте секунды на 1000 и преобразуйте снова.

Unix timestamp — это секунды или миллисекунды?

Обычно секунды. Многие веб-API и JavaScript Date используют миллисекунды. Смотрите документацию. Некоторые системы используют микросекунды или наносекунды.

Как перевести секунды в миллисекунды?

Умножьте на 1000. 1720000000 секунд — это 1720000000000 миллисекунд. В обратную сторону разделите на 1000.

Почему JavaScript Date использует миллисекунды?

Числовой timestamp Date в JavaScript определён как миллисекунды с Unix epoch. Поэтому new Date(unixSeconds) неверен, если unixSeconds — это Unix-секунды.

10-значный timestamp всегда секунды?

Нет. Для современных дат часто да, а 13 цифр часто миллисекунды. Число цифр — подсказка, не правило. Подтвердите документацией или датой, которая имеет смысл.

Содержит ли Unix timestamp часовой пояс?

Нет. Unix timestamp — это момент, отсчитанный от 1970-01-01 00:00:00 UTC. Пояса влияют на отображение, не на само число.