Розробка · 2 хв читання ·
Unix-час: секунди чи мілісекунди?
Баг із 13 цифрами, який щотижня потрапляє в продакшн, і дуже просте правило, як відрізнити одну одиницю від іншої.

JavaScript рахує в мілісекундах, більшість бекендів — у секундах. Переплутайте їх, і дати опиняться в січні 1970 року або на десятки тисяч років у майбутньому.
Порахуйте цифри
Сучасна часова мітка в секундах має 10 цифр (1790000000 — це 21 вересня 2026 року). Той самий момент у мілісекундах має 13 цифр, у мікросекундах 16, у наносекундах 19.
Правило
Якщо абсолютне значення більше за 10¹², це мілісекунди; інакше вважайте його секундами. Правило працює для будь-якої мітки в мілісекундах після вересня 2001 року і будь-якої мітки в секундах до 33658 року.
const ms = Math.abs(n) > 1e12 ? n : n * 1000;
Обирайте одиницю явно
Конвертер часових міток 4Dev не вгадує: "Unix Timestamp" — це секунди, а "Unix Timestamp (ms)" — мілісекунди, поруч є варіанти в мікро- та наносекундах. Загалом 33 формати, зокрема ISO 8601, RFC 2822, SQL DATETIME і порядкові дати Excel.