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.
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.