Guía

Qué es un timestamp Unix y cómo se calcula

Entiende qué mide Unix time, cuál es su epoch y cómo pasar de segundos transcurridos a una fecha UTC con ejemplos exactos.

por Tools in a Tab · Publicado el · Actualizada

Respuesta breve

Un timestamp Unix representa tiempo como una cantidad respecto a un instante común: 1970-01-01 00:00:00 UTC, llamado Unix epoch. En su forma habitual cuenta segundos; muchas APIs y lenguajes usan milisegundos, por lo que la unidad debe formar parte del dato.

El conversor se abre en el sentido elegido. Confirma segundos o milisegundos para un timestamp, o la hora local frente a UTC para una fecha. Usar ahora calcula a partir del reloj del navegador; no es un servicio de hora sincronizada.

Línea temporal de Unix con el epoch cero, un día antes y un segundo después
Un timestamp sitúa un instante antes o después del epoch y debe indicar si usa segundos o milisegundos.

Tres ejemplos que fijan el modelo

Fecha UTC Segundos Unix Milisegundos Unix
1970-01-01 00:00:00 0 0
1970-01-01 00:00:01 1 1000
2000-01-01 00:00:00 946684800 946684800000

El timestamp no guarda palabras como «sábado», una zona horaria ni un formato visual. Guarda un punto de la línea temporal. La presentación como 01/01/2000, 1999-12-31 19:00 o 2000-01-01T00:00:00Z depende después de la zona y del formato elegidos.

Cómo se calcula

Conceptualmente, se resta el epoch a la fecha UTC y se expresa la diferencia en la unidad deseada:

timestamp en segundos = (instante UTC - epoch UTC) / 1 segundo
timestamp en ms       = (instante UTC - epoch UTC) / 1 milisegundo

Por ejemplo, un día exacto después del epoch son 24 × 60 × 60 = 86400 segundos. Un día antes es -86400. Los valores negativos no son errores por sí mismos: representan instantes anteriores a 1970.

Verificar el cálculo con JavaScript

Esta ida y vuelta usa el ejemplo del año 2000 anterior, no un reloj cambiante:

const seconds = 946684800;
const date = new Date(seconds * 1000);
const utc = date.toISOString();
const secondsAgain = date.getTime() / 1000;
// utc: "2000-01-01T00:00:00.000Z"
// secondsAgain: 946684800

Date recibe milisegundos, getTime() devuelve milisegundos y toISOString() representa el instante en UTC, como documenta MDN. Pasar 946684800 directamente a new Date() produce en cambio 1970-01-11T22:58:04.800Z: se interpretó una unidad equivocada, no una zona horaria equivocada.

Para obtener el valor actual en segundos enteros, Math.floor(Date.now() / 1000) descarta deliberadamente la fracción de milisegundo. Conserva Date.now() si el consumidor necesita milisegundos. No redondees un timestamp almacenado salvo que su contrato permita perder esa precisión.

Sin escribir código, abre el conversor de timestamp a fecha, confirma Segundos (s), introduce 946684800 y convierte. Contrasta la salida UTC con la tabla. La guía de segundos frente a milisegundos desarrolla los valores fraccionarios y el diagnóstico de unidades.

Lo que Unix time no resuelve

  • No identifica la zona horaria que escribió una fecha local.
  • No evita las horas inexistentes o repetidas por cambios de horario.
  • No dice por sí solo si la unidad son segundos o milisegundos.
  • No demuestra que un reloj estuviera sincronizado.
  • No incorpora normalmente segundos intercalares en el recuento cotidiano.

Para convertir un valor real, elige explícitamente unidad y zona en el conversor de fecha, hora y timestamp. La definición NumericDate de JWT sigue el mismo origen y expresa segundos desde el epoch, ignorando segundos intercalares, según la RFC 7519.

Comprobación rápida

Si un valor actual tiene aproximadamente diez cifras, probablemente esté en segundos; con trece, suele estar en milisegundos. Es solo una pista: confirma el contrato del sistema antes de convertir. Multiplicar o dividir por 1000 debe cambiar la unidad, no el instante.