
En resumen
Unix time es una cuenta de segundos sin bisiestos desde 1970-01-01T00:00:00Z, no un formato de fecha. Casi todo se rompe al leer segundos como milisegundos, al ignorar el huso horario o al tocar el límite de 32 bits en 2038-01-19.
Un timestamp Unix parece lo más simple de un payload: un entero, fácil de ordenar y de comparar. Hasta que un valor de trece dígitos se lee como segundos, una hoja de cálculo exportada llega un día antes o un campo se rompe en silencio en 2038. Esta guía cubre qué cuenta el número, cómo distinguir su unidad y las trampas de época que siguen vivas en sistemas reales.
Puedes seguirla con el conversor de timestamp de UrsaKit. Detecta segundos y milisegundos automáticamente, muestra la unidad detectada en el resultado y se ejecuta entero en el navegador.
01Qué cuenta realmente Unix time
Unix time es el número de segundos sin bisiestos transcurridos desde las 00:00:00 UTC del 1 de enero de 1970, un instante llamado epoch de Unix. Se suele guardar como entero con signo, y el cero es exactamente la medianoche UTC de esa fecha.
De la definición salen tres propiedades, y cada una provoca errores cuando se olvida:
- Es un instante, no un calendario. El mismo timestamp se muestra con horas locales distintas en cada zona.
- Es una cuenta de segundos, salvo donde habría bisiestos. El contador los salta para seguir siendo un entero simple.
- Tiene signo. Los timestamps negativos describen instantes anteriores a 1970.
Trata el timestamp como un instante, no como una fecha.
Todos los problemas de conversión de esta guía vienen de darle significado de calendario demasiado pronto. Convierte a una cadena local solo en el borde del sistema, justo antes de mostrarla a una persona.
02¿Segundos o milisegundos? Cuenta los dígitos
La forma más rápida de identificar la unidad es contar dígitos, porque cada salto es aproximadamente un factor de mil.
| Dígitos | Unidad | Valor de ejemplo | Representa |
|---|---|---|---|
| 10 | segundos | 1791108163 | 2026-10-04T10:02:43Z |
| 13 | milisegundos | 1791108163000 | el mismo instante |
| 16 | microsegundos | 1791108163000000 | el mismo instante |
| 19 | nanosegundos | 1791108163000000000 | el mismo instante |
JavaScript está en el bando de los milisegundos: Date.now() devuelve el número de milisegundos transcurridos desde el epoch. Ese solo hecho explica casi todo el desajuste entre un frontend JavaScript y un backend que guarda segundos.
La heurística de los dígitos no es una ley. Los valores de diez dígitos no empiezan a aparecer hasta septiembre de 2001, y un valor que parece de segundos puede ser un timestamp en milisegundos de 1973. Por eso un conversor debería enseñarte la unidad que detectó en lugar de adivinarla en silencio.
03Cómo convertir un timestamp en el navegador
El conversor de UrsaKit trabaja en las dos direcciones, así que puedes ir del número crudo a una fecha legible y volver.
- Pega el valor en el campo Timestamp or date. El marcador muestra las tres formas que acepta:
1700000000,1700000000000y2026-10-04T09:30:00Z. - Pulsa Use now si quieres el instante actual, o Use ISO time para partir de una fecha fija.
- Pulsa Convert.
- Lee la tabla Result. Lista segundos Unix, milisegundos Unix, ISO 8601 en UTC, fecha y hora local, solo fecha, solo hora, la cadena UTC, el tiempo relativo, el día de la semana y el formato detectado.
- Pulsa Copy en la fila que necesites.
Si el valor no se puede parsear, el área de resultado dice que no es un timestamp o una fecha válidos en lugar de mostrar uno equivocado. Ese mensaje es la señal para volver y contar dígitos.
04Ejemplos resueltos
Estas salidas salen de convertir cada valor el 2026-10-04.
| Entrada | Interpretación | ISO 8601 (UTC) |
|---|---|---|
0 | segundos | 1970-01-01T00:00:00Z |
1000000000 | segundos | 2001-09-09T01:46:40Z |
1000000000000 | milisegundos | 2001-09-09T01:46:40Z |
1791108163 | segundos | 2026-10-04T10:02:43Z |
2147483647 | segundos | 2038-01-19T03:14:07Z |
La tercera fila es la útil: el mismo instante escrito con dos precisiones. Cuando ves ese patrón, un desajuste de unidad deja de parecer una fecha corrupta y empieza a parecer un factor de mil evidente.
05El problema del año 2038
Un entero con signo de 32 bits llega hasta 2147483647. Leído como segundos Unix en 32 bits, eso es 2038-01-19T03:14:07Z, y un segundo después el valor salta al extremo negativo del rango: 1901-12-13.
Los sistemas de 64 bits lo superaron hace años, así que el riesgo no está en tu portátil. Está donde sobrevive un tipo de tiempo de 32 bits:
- firmware y dispositivos embebidos con un
time_tde ancho fijo - formatos binarios que reservaron cuatro bytes para un timestamp
- columnas de base de datos declaradas como enteros con signo de 32 bits
- formatos de serialización especificados antes de que 64 bits fuera lo normal
El arreglo no tiene gracia: ensanchar el tipo o guardar una cadena ISO 8601 en el borde. Los casos peligrosos son aquellos en los que el formato no puede cambiar, y por eso el problema sigue apareciendo en conversaciones.
06Otras épocas que te vas a encontrar
Unix time es la dominante, pero no la única época en circulación, y mezclarlas produce fechas desplazadas por un valor fijo.
| Sistema | Época | Unidad | Nota |
|---|---|---|---|
| Unix / POSIX | 1970-01-01 | segundos o milisegundos | El valor por defecto en casi todas partes |
| Sistema 1900 de Excel | documentado como 1900-01-01 | días | Incluye un 1900-02-29 que nunca existió |
| Apple Cocoa | 2001-01-01 | segundos | Habitual en API antiguas de Apple |
| Discord | 1970-01-01 | segundos | Se formatea con <t:…>, nunca se guarda como texto |
Excel es la que pilla a quien trabaja con datos exportados. Microsoft documenta el sistema de 1900 como un recuento de días desde el 1 de enero de 1900 y da el 5 de julio de 2011 como número de serie 40729. Ese número solo cuadra si la época efectiva es el 30 de diciembre de 1899: el sistema arrastra un 29 de febrero de 1900 fantasma, así que toda fecha desde el 1900-03-01 se desplaza un día. Verificado en local el 2026-10-04 con python3 -c "import datetime; print((datetime.date(2011,7,5)-datetime.date(1899,12,30)).days)", que imprime 40729.
La época de Cocoa de Apple es el 1 de enero de 2001, que equivale al tiempo Unix 978307200. Verificado el mismo día con python3 -c "import datetime; print(int(datetime.datetime(2001,1,1,tzinfo=datetime.timezone.utc).timestamp()))".
Discord toma un timestamp Unix y lo renderiza en la zona de quien lee con un sufijo de marcado: <t:1791108163:R> para tiempo relativo y <t:1791108163:F> para fecha completa. Como el marcado se interpreta en el cliente, el mismo mensaje muestra texto distinto a cada lector, que es el comportamiento correcto para un instante.
07Trampas de huso horario y horario de verano
Un timestamp no tiene huso horario. Las reglas de zona solo entran cuando lo renderizas, y ahí es exactamente donde viven los errores.
Guarda UTC. Convierte en el borde. Cuando tengas que alinear varias zonas para una reunión, el conversor de husos horarios hace la aritmética por ti. Si te descubres guardando una hora local de pared como timestamp Unix, ya has perdido: no hay forma de distinguir una regla de horario de verano añadida después de la intención original.
Merece la pena nombrar dos trampas concretas. Primera, «medianoche» no es un marcador seguro del inicio de un día, porque una zona puede saltar de las 23:59 a la 01:00 cuando los relojes se adelantan. Segunda, las fechas HTTP y las tareas cron son conceptos de hora local, así que un trabajo programado a las 02:30 puede saltarse una vez al año en algunas zonas. Conviértelo a una zona explícita antes de probarlo.
08Errores frecuentes
| Síntoma | Causa | Arreglo |
|---|---|---|
| El año sale 1970 o 55000 | Segundos leídos como milisegundos, o al revés | Cuenta dígitos y confirma la unidad detectada |
| La fecha se va un día | El número de serie de Excel tratado como timestamp Unix | Convierte con la época efectiva 1899-12-30 |
| Las fechas se mueven una hora dos veces al año | Hora local guardada como instante | Guarda UTC y convierte al mostrar |
| El valor es exactamente 2147483647 | Estás viendo el techo de 32 bits | Planifica la migración antes del 2038-01-19 |
| El tiempo relativo dice «hace 4 años» | La entrada estaba en milisegundos y se leyó como segundos | Multiplica o divide por 1000 según toque |
Si lo que necesitas de verdad es la distancia entre dos fechas y no una representación, la calculadora de diferencia entre fechas cuenta días, semanas y días laborables.
09Fuentes
- Wikipedia — Unix time (fecha de consulta: 2026-10-04)
- MDN Web Docs — Date.now() (fecha de consulta: 2026-10-04)
- Microsoft Learn — Differences between the 1900 and the 1904 date system in Excel (fecha de consulta: 2026-10-04)
- Documentación para desarrolladores de Discord — Message Formatting (fecha de consulta: 2026-10-04)
- RFC 3339 — Date and Time on the Internet: Timestamps (fecha de consulta: 2026-10-04)
Pega segundos, milisegundos o una cadena de fecha y lee todos los formatos a la vez, con la unidad detectada en el resultado.
Conversor de timestampPreguntas frecuentes
¿Qué es un timestamp Unix?
Es el número de segundos sin bisiestos transcurridos desde las 00:00:00 UTC del 1 de enero de 1970. Es un contador, no un formato de fecha, así que no lleva huso horario propio.
¿Cómo sé si un timestamp está en segundos o en milisegundos?
Cuenta los dígitos. Diez dígitos casi siempre son segundos y trece casi siempre milisegundos. Dieciséis son microsegundos y diecinueve nanosegundos.
¿Qué es el problema del año 2038?
Un entero con signo de 32 bits se queda sin espacio en 2147483647, que es 2038-01-19T03:14:07Z. Los sistemas que aún guardan el tiempo en 32 bits vuelven a 1901 un segundo después.
¿Por qué mi fecha de Excel se va un día?
El sistema de fechas de 1900 de Excel incluye un 1900-02-29 que nunca existió. Para cualquier fecha desde el 1900-03-01, el número de serie se comporta como si el origen fuera el 1899-12-30.
¿Cambia el timestamp si cambio de huso horario?
No. El timestamp es el mismo instante en todas partes. Solo cambia su representación legible, porque ahí es donde se aplican el huso horario y el horario de verano.
¿Puede un timestamp Unix ser negativo?
Sí. Los valores negativos representan instantes anteriores al 1970-01-01 UTC. Muchas API y bases de datos los aceptan, pero algunos esquemas y bibliotecas antiguas no.
¿Por qué mi timestamp no incluye segundos bisiestos?
Unix time ignora los segundos bisiestos a propósito. Solo cuenta segundos sin bisiestos, así que se mantiene como un entero simple a cambio de no coincidir del todo con el tiempo atómico alrededor de un bisiesto.
Artículos relacionados
- Cómo formatear, validar y minificar JSON
Los timestamps suelen llegar dentro de un payload JSON. Así se inspecciona.
- ¿Qué código de estado HTTP debe devolver una API?
Las cabeceras Date y Retry-After usan sus propios formatos de tiempo y se equivocan con facilidad.
Herramientas relacionadas
- Conversor de timestamp
Detecta segundos y milisegundos, y muestra ISO 8601 y hora local.
- Conversor de husos horarios
Convierte un mismo instante a la hora local de varias zonas.
- Calculadora de diferencia entre fechas
Cuenta días, semanas y días laborables entre dos fechas.