La hora Unix en un párrafo
La hora Unix cuenta los segundos transcurridos desde las 00:00:00 UTC del 1 de enero de 1970, un momento conocido como epoch. Ignora por completo las zonas horarias y el horario de verano: en un instante dado, la hora Unix es el mismo número en cualquier lugar de la Tierra. Eso la convierte en el formato natural para guardar y comparar momentos en bases de datos, archivos de log, los claims exp e iat de un JWT, fechas de modificación de archivos, respuestas de API y programadores tipo cron. El problema es que 1700000000 no le dice nada a una persona, y para eso sirve este conversor. Por si acaso: corresponde al 14 de noviembre de 2023, 22:13:20 UTC.
Segundos, milisegundos y números más largos
Cada sistema cuenta en una unidad distinta:
- Segundos, 10 dígitos para fechas actuales: herramientas de Unix y Linux,
time()de PHP,time.time()de Python (con parte decimal), la mayoría de bases de datos SQL, los JWT. - Milisegundos, 13 dígitos:
Date.now()de JavaScript,System.currentTimeMillis()de Java, muchas API JSON y eventos de analítica. - Microsegundos, 16 dígitos, y nanosegundos, 19 dígitos: algunas bases de datos, Go, herramientas de trazado de alta resolución.
La herramienta decide la unidad por el tamaño. Cualquier número entero con valor absoluto por debajo de 100 000 000 000 se lee como segundos; hasta 100 000 000 000 000 (14 dígitos), como milisegundos; por debajo de 10^17, como microsegundos, y cualquier valor mayor, como nanosegundos. Esos umbrales funcionan en todos los casos realistas: en segundos, el primero sería el año 5138; en milisegundos, principios de marzo de 1973.
Los valores en microsegundos y nanosegundos se recortan a precisión de milisegundos, porque es todo lo que muestran los resultados. No se aceptan entradas con decimales como 1700000000.5, así que quita antes la parte decimal.
Los números negativos funcionan y dan fechas anteriores a 1970: -86400 es el 31 de diciembre de 1969.
Cómo leer los seis resultados
- Unix, segundos y Unix, milisegundos: el mismo instante en las dos unidades. Los milisegundos se conservan cuando pegas una fecha con una parte de hora como
.250; el valor en segundos se redondea hacia abajo. - ISO 8601: por ejemplo
2023-11-14T22:13:20.000Z. Siempre en UTC, indicado por laZ, con precisión de milisegundos. Es el formato más seguro para API y JSON, porque se ordena correctamente como texto y todos los lenguajes lo interpretan. - UTC: el estilo de fecha HTTP,
Tue, 14 Nov 2023 22:13:20 GMT, que se usa en las cabecerasExpires,Last-Modifiedy en las cookies. - Tu zona horaria: día/mes/año con reloj de 24 horas, seguido de la abreviatura de la zona horaria (o un desfase GMT cuando no existe) y el nombre de zona que indica tu navegador, como
Europe/Berlin. Se aplica el horario de verano de esa fecha, no el desfase de hoy. - Relativo: expresiones como «ayer», «dentro de 3 días» o «hace 2 años». Es aproximado a propósito: los meses se promedian en unos 30,4 días, y el valor se actualiza mientras la página está abierta.
Convertir una fecha en timestamp
Puedes pegar una fecha en lugar de un número. Las cadenas ISO 8601 son la entrada más fiable, y conviene conocer las reglas de zona horaria, porque son las responsables de la mayoría de errores de unas horas:
2024-05-01T12:00:00Zy2024-05-01T12:00:00+02:00llevan su propio desfase y no son ambiguas.2024-05-01sin hora se trata como medianoche UTC.2024-05-01T12:00y2024-05-01 12:00, una fecha con hora pero sin desfase, se tratan como tu hora local.
Así que, si estás en Madrid en verano, 2024-05-01 y 2024-05-01 00:00 difieren en dos horas. Al convertir para un servidor o una API, añade Z o un desfase explícito para no dejar nada a la suposición.
Otros formatos, como May 1, 2024 12:00, dependen del parser de fechas del navegador y pueden comportarse distinto en Chrome, Firefox y Safari. Los formatos con el día primero, como 01/05/2024, se leen con el mes primero al estilo estadounidense o se rechazan, así que evítalos.
Trampas que conviene conocer
- Segundos intercalares. La hora Unix finge que todos los días tienen exactamente 86 400 segundos. Los 27 segundos intercalares añadidos desde 1972 no se cuentan, algo que solo importa para mediciones científicas de precisión.
- El problema del año 2038. Los sistemas que guardan la hora Unix como entero de 32 bits con signo se desbordan en
2147483647, que es el 19 de enero de 2038, 03:14:07 UTC. Pega ese número para verlo. Los sistemas modernos de 64 bits no se ven afectados, pero los dispositivos embebidos antiguos y algunos formatos de archivo sí pueden estarlo. - Desfase de reloj. Si un JWT se rechaza como «todavía no válido» o «caducado», compara sus
iatyexpcon la Hora Unix actual en vivo de la parte superior de la página. Una diferencia de unos pocos minutos apunta a un reloj mal puesto más que a un token incorrecto.
Para leer los claims de un token, decodifica su parte central con la herramienta Base64 y ordena el JSON con el formateador de JSON. Las conversiones se ejecutan en tu navegador usando su propio reloj y su configuración de zona horaria.