Temporal Ya Es Estándar: La API Que Por Fin Sustituye a Date
TC39 aprobó Temporal en Stage 4 y ya funciona sin flags en Chrome, Firefox y Node 26. Qué cambia para tus timestamps, zonas horarias y cálculos de fechas.
Nueve años después, JavaScript tiene una API de fechas decente
Temporal llegó a Stage 4 en el plenario de TC39 de marzo y forma parte del estándar ES2026. Pero más importante que el papeleo: ya está shipped y sin flags en Chrome 144 (enero 2026), Firefox 139 (desde mayo 2025) y Node.js 26. Es la primera vez que puedes usar una API de fechas moderna en producción real sin polyfill, al menos en una parte de tus usuarios.
Es el final de un camino larguísimo — la propuesta lleva en TC39 desde 2017 — y la respuesta oficial a todo lo que te contamos en nuestro artículo sobre por qué Date.parse() era una trampa.
El problema que resuelve
Date mezclaba en un solo objeto tres conceptos distintos: instante absoluto, fecha de calendario y hora de reloj. De ahí venían sus horrores: meses que empiezan en 0 pero días en 1, parsing dependiente de implementación, mutabilidad traicionera y un soporte de zonas horarias que era, siendo generosos, testimonial.
Temporal separa esos conceptos en tipos explícitos:
| Tipo | Para qué |
|---|---|
Temporal.Instant |
Un instante absoluto (lo que un timestamp Unix representa) |
Temporal.ZonedDateTime |
Instante + zona horaria + calendario |
Temporal.PlainDate |
Una fecha de calendario sin hora ni zona |
Temporal.PlainDateTime |
Fecha y hora "de pared", sin zona |
Temporal.PlainTime |
Una hora de reloj sin fecha |
Temporal.Duration |
Cantidades de tiempo para sumar/restar |
Y todo es inmutable: cada operación devuelve un objeto nuevo. Se acabó el date.setMonth() que te modificaba la variable sin avisar.
Cómo se ve en código
// Convertir un timestamp a hora local en Madrid
const instant = Temporal.Instant.fromEpochMilliseconds(1729500000000);
const enMadrid = instant.toZonedDateTimeISO('Europe/Madrid');
enMadrid.toString();
// '2024-10-21T10:40:00+02:00[Europe/Madrid]'
// Sumar 1 mes de calendario REAL (no 30 días)
Temporal.PlainDate.from('2026-01-31').add({ months: 1 });
// 2026-02-28 — Temporal conoce los calendarios
// Duración atravesando un cambio de horario (DST)
const antes = Temporal.PlainDateTime.from('2026-03-28T12:00');
antes.add({ hours: 24 }); // 29 de marzo, 12:00 — correcto
Compara con el Date equivalente, donde "añadir 24 horas" y "añadir un día" son operaciones distintas que nadie recuerda bien hasta que fallan en producción el fin de semana del cambio de hora.
El detalle bonito: temporal_rs
Una de las historias más curiosas detrás de Temporal es temporal_rs: una implementación en Rust desarrollada colaborativamente por ingenieros de varios engines (V8, Boa, SpiderMonkey) en lugar de cada uno por su cuenta. Es probablemente la primera vez que múltiples motores JavaScript comparten la misma librería para implementar una propuesta de TC39 — y explica por qué la conformidad de tests (más de 5.000 en test262) llegó tan rápido al 100%.
¿Puedo usarlo ya?
- En navegadores modernos: sí, Chrome/Edge 144+ y Firefox 139+ lo traen de serie.
- En Node: sí, desde Node 26 (y ya de paso, Node 26 entra en LTS este mismo mes).
- Safari: en desarrollo; ahí sigue haciendo falta polyfill (
@js-temporal/polyfill). - TypeScript: los tipos ya están en TS 6.x/7.x de serie.
Mientras la cobertura se completa, nada impide convivir: sigue usando timestamps Unix para almacenar y transportar, y usa Temporal para la lógica de calendarios y zonas. Si necesitas convertir entre timestamps y fechas legibles —con o sin Temporal—, nuestro conversor de timestamps sigue siendo el atajo más rápido.
Date no va a desaparecer (demasiado código depende de él), pero a partir de ahora ya no hay razón para escribir código nuevo que lo use. Eso, tras casi treinta años, sí que es noticia.
Artigos relacionados
El Gusano Shai-Hulud Sigue Vivo en npm: Qué Credenciales Rotar y en Qué Orden
tensorlake@0.5.144 es la última variante del gusano que roba tokens de npm, GitHub y tu .env antes de republicarse con tu identidad. Checklist práctico si instalaste paquetes afectados.
OAuth 2.1 Ya Jubila Oficialmente a RFC 6749: Estas Son las Reglas Nuevas
El draft-16 de OAuth 2.1, publicado en septiembre, declara obsoletos RFC 6749 y 6750: PKCE para todos, adiós al implicit grant. Y el nuevo BCP de validación de JWT está a punto de ser RFC.