Guía

Timestamps negativos y fechas anteriores a 1970

Aprende qué significa un timestamp Unix negativo, cómo calcular fechas anteriores al epoch y qué límites comprobar.

por Tools in a Tab · Publicado el · Revisado el

Respuesta breve

Un timestamp negativo representa un instante anterior al Unix epoch. El signo no indica que el dato esté corrupto: señala una distancia hacia atrás desde 1970-01-01 00:00:00 UTC.

Ejemplos exactos

Timestamp en segundos Fecha UTC
0 1970-01-01 00:00:00
-1 1969-12-31 23:59:59
-86400 1969-12-31 00:00:00
-2208988800 1900-01-01 00:00:00

La aritmética es simétrica alrededor de cero. En milisegundos, el segundo anterior al epoch es -1000; el milisegundo anterior es -1.

Por qué algunos sistemas los rechazan

Unix time es un modelo, pero cada base de datos, lenguaje o protocolo decide su rango. Un campo sin signo no puede almacenar negativos. Bibliotecas antiguas o sistemas que usan enteros de 32 bits pueden imponer límites más estrechos. Una interfaz también puede restringir años aunque su representación interna admita más.

Por eso hay que separar dos preguntas:

  1. ¿La fecha tiene un timestamp matemáticamente válido?
  2. ¿El sistema de destino admite ese valor y su rango?

El conversor de timestamp acepta fechas anteriores a 1970 dentro del rango documentado y calcula con enteros antes de crear la fecha.

Calendarios y fechas históricas

Convertir una fecha muy antigua no prueba que el calendario civil de aquel lugar se escribiera entonces de la misma manera. Las APIs modernas suelen extender el calendario gregoriano hacia atrás de forma uniforme. Esto sirve para aritmética técnica, pero una investigación histórica puede requerir reglas locales sobre calendarios y transiciones.

Comprobaciones recomendadas

  • Conserva el signo durante serialización y transporte.
  • Declara segundos o milisegundos.
  • Prueba -1, 0 y 1 como frontera.
  • Comprueba el rango del almacenamiento receptor.
  • Muestra siempre la fecha UTC de verificación.

Fuente primaria

La especificación de valores de tiempo de ECMAScript define el epoch, los milisegundos y los días anteriores mediante valores negativos.