Техподдержка
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
- Значение в секундах
- Ошибочно принято за миллисекунды
- Дата около 1970
Если результат около 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?
Проходите проверки по порядку. Одних цифр мало.
- Проверьте документацию API или базы данных.
- Посмотрите примерное число цифр.
- Сравните значение с правдоподобным современным timestamp.
- Проверьте значение как секунды и как миллисекунды.
- Посмотрите, имеет ли смысл получившаяся дата.
Если одно толкование даёт 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. Пояса влияют на отображение, не на само число.