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

Открыть конвертер временных меток