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