Разработка · 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.