Tech Help

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. Пояси впливають на відображення, не на саме число.