Dev · 2 min de leitura ·
Timestamps Unix: segundos ou milissegundos?
O bug dos 13 dígitos que vai para produção toda semana, e uma regra bem simples para diferenciar as duas unidades.

O JavaScript fala em milissegundos. A maioria dos back-ends fala em segundos. Misture os dois e suas datas vão parar em janeiro de 1970, ou dezenas de milhares de anos no futuro.
Conte os dígitos
Um timestamp atual em segundos tem 10 dígitos (1790000000 é 21 de setembro de 2026). O mesmo instante em milissegundos tem 13 dígitos; em microssegundos, 16, e em nanossegundos, 19.
A regra
Se o valor absoluto for maior que 10¹², são milissegundos; caso contrário, trate como segundos. Vale para qualquer timestamp em milissegundos depois de setembro de 2001 e qualquer timestamp em segundos antes do ano 33658.
const ms = Math.abs(n) > 1e12 ? n : n * 1000;
Escolha a unidade explicitamente
O conversor de timestamps da 4Dev não tenta adivinhar: "Unix Timestamp" significa segundos e "Unix Timestamp (ms)" significa milissegundos, ao lado de variantes em microssegundos e nanossegundos: 33 formatos no total, incluindo ISO 8601, RFC 2822, SQL DATETIME e datas seriais do Excel.