Angela Sofíá Osorio
Tiempo de lectura 4 minutes
Fecha de publicación
Si has programado en JavaScript por más de una semana, seguramente ya te has peleado con el objeto Date. Ese viejo conocido que lleva con nosotros desde 1995, basado en una API de Java que irónicamente fue deprecada dos años después. Llevamos décadas arrastrando sus peculiaridades en la web.
Meses que empiezan en cero, días que empiezan en uno, mutabilidad que rompe tu código en silencio y un soporte para zonas horarias inexistente. Por suerte, la tortura llega a su fin.
Temporal API ya es parte de la especificación ES2026 y promete enviar a librerías pesadas a un merecido descanso. Vamos a ver cómo funciona para que puedas empezar a limpiar tu código hoy mismo.
La anatomía de Temporal
Temporal es un espacio de nombres global, no una clase. Olvídate de usar la palabra clave new. En su lugar, accedes a diferentes tipos dependiendo de tu caso de uso específico, todos ellos inmutables por defecto.
Los tipos principales se dividen según lo que necesitas modelar:
- Temporal.Instant: Un punto específico en el tiempo, en UTC.
- Temporal.ZonedDateTime: Un instante junto con su zona horaria exacta.
- Temporal.PlainDate: Solo una fecha en el calendario. Ideal para vencimientos.
- Temporal.PlainTime: Solo la hora del día, independiente de la fecha.
- Temporal.Duration: Una cantidad de tiempo o lapso.
Obteniendo la fecha y hora actual
Empecemos con la operación más común. Obtener el momento exacto en la zona horaria del usuario es directo y el resultado te da información clara sin necesidad de formatear a mano.
const ahora = Temporal.Now.zonedDateTimeISO();
console.log(ahora.toString());
// Resultado: 2026-04-24T14:32:15.123+02:00[Europe/Amsterdam]JavaScriptEse texto entre corchetes lo cambia todo. La API no solo sabe que hay un desfase de horas, sabe exactamente a qué zona horaria pertenece. Los problemas con el horario de verano se resuelven solos.
Si solo necesitas la fecha en el calendario, es igual de sencillo:
const hoy = Temporal.Now.plainDateISO();
console.log(hoy.toString());
// Resultado: 2026-04-26JavaScriptMatemáticas de fechas sin romper nada
Aquí es donde Temporal demuestra su valor. Cada tipo incluye métodos como add, subtract, since y until. Al ser una API inmutable, estas funciones regresan un valor nuevo dejando la fecha original intacta.
Imagina que necesitas calcular cuándo termina un periodo de prueba de 30 días para un usuario:
const fechaRegistro = Temporal.PlainDate.from("2026-04-24");
const finPrueba = fechaRegistro.add({ days: 30 });
console.log(finPrueba.toString()); // 2026-05-24
console.log(fechaRegistro.toString()); // 2026-04-24 (Intacta)JavaScriptTambién puedes comparar la distancia exacta entre dos fechas usando el método until, el cual te devolverá un tipo de dato Duration.
const inicio = Temporal.PlainDate.from("2026-01-01");
const fin = Temporal.PlainDate.from("2026-04-24");
const diferencia = inicio.until(fin, { largestUnit: "months" });
console.log(diferencia.toString()); // P3M23D (3 meses, 23 días)JavaScriptLa cadena de texto P3M23D sigue el estándar ISO 8601. La letra P indica que es un periodo, la M señala los meses y la D representa los días.
Zonas horarias manejadas de forma nativa
Agendar eventos globales requería matemáticas mentales o librerías enormes. Con Temporal, transformar la zona horaria de un evento es un proceso limpio.
Si tienes una llamada agendada en Ámsterdam y necesitas mostrar a qué hora sonará el teléfono en Nueva York, usas el método withTimeZone:
const llamadaAmsterdam = Temporal.ZonedDateTime.from(
"2026-04-24T15:00:00[Europe/Amsterdam]"
);
const llamadaNuevaYork = llamadaAmsterdam.withTimeZone("America/New_York");
console.log(llamadaNuevaYork.toString());
// 2026-04-24T09:00:00-04:00[America/New_York]JavaScriptSigue siendo el mismo instante en la historia, pero representado correctamente según el reloj de pared de cada región.
Chrome y Firefox ya ofrecen soporte nativo en sus versiones más recientes. Safari todavía lo mantiene bajo una bandera experimental en su versión técnica, por lo que necesitarás un polyfill para producción.
Librerías como @js-temporal/polyfill son ligeras, seguras y te permiten enviar tu código a producción sin preocuparte por los navegadores rezagados.
Temporal es el mayor avance de JavaScript en manejo de datos en tres décadas. Integrarlo en tus nuevos proyectos hará desaparecer cientos de horas de depuración. ¿Estás listo para dejar morir al objeto Date de una vez por todas? Cuéntame en los comentarios si ya probaste esta API o si todavía no puedes soltar tu librería de confianza.
Contents
