JavaScript soluciona el problema de Date

JavaScript jubila Date: Temporal ya es la nueva forma de trabajar con fechas

Si llevas poco tiempo programando en JavaScript, probablemente todavía no hayas tenido que pelearte con el objeto Date. Si es así, enhorabuena: estás llegando justo cuando las cosas empiezan a cambiar para mejor.

Date existe desde 1995 y arrastra decisiones que hoy parecen difíciles de justificar. Los meses empiezan en cero, las zonas horarias pueden jugarte malas pasadas y una fecha puede modificarse desde cualquier parte del código sin que te des cuenta. No es casualidad que durante años hayan aparecido librerías como Moment.js, Luxon o date-fns para intentar hacer más llevadero el trabajo con fechas.

La buena noticia es que Node.js 26 activa por defecto Temporal, la API moderna que sustituye a Date. Su objetivo es muy claro: trabajar con fechas y horas sin sorpresas. Las fechas son inmutables, existen tipos específicos para fechas, horas y zonas horarias, y los cálculos de calendario son mucho más fiables.

En otras palabras, uno de los mayores quebraderos de cabeza de JavaScript por fin tiene una solución oficial.

Y aquí hay una lección interesante para quien está aprendiendo. La primera es práctica: si empiezas ahora con JavaScript, merece la pena aprender Temporal desde el principio y evitar muchos de los problemas que generaciones de desarrolladores tuvieron que soportar.

La segunda es casi una filosofía de aprendizaje. Muchas veces pensamos que llegamos tarde a una tecnología, pero los lenguajes evolucionan constantemente. Los que empiezan hoy no solo aprenden más rápido, sino que en ocasiones aprenden directamente la versión buena, sin cargar con años de trucos, parches y malas costumbres.

Temporal en JavaScript: guía rápida y ejemplos

Temporal ofrece una forma fiable y predecible de trabajar con fechas y horas. A continuación se presentan ejemplos prácticos para empezar a usarlo hoy mismo.

Crear y formatear fechas

// Asumiendo que Temporal está disponible (Node.js 26+ o polyfill si corresponde)
const todayISO = Temporal.Now.plainDateISO(); // PlainDate
console.log(todayISO.toString()); // e.g., 2026-07-09

const specificDate = Temporal.PlainDate.from('2024-12-25');
console.log(specificDate.toString()); // 2024-12-25

Sumar y restar tiempo

const date = Temporal.PlainDate.from('2024-03-15');

// Sumar 2 meses
const plusTwoMonths = date.add({ months: 2 });
console.log(plusTwoMonths.toString()); // 2024-05-15

// Restar 10 días
const minusTenDays = date.subtract({ days: 10 });
console.log(minusTenDays.toString()); // 2024-03-05

Trabajar con horas y zonas horarias

// Instant en UTC y conversión con zona específica
const instant = Temporal.Now.instant();
const zoned = instant.toZonedDateTimeISO('Europe/Madrid');
console.log(zoned.toString()); // 2024-...T...
console.log(zoned.hour);        // hora en la zona indicada

// Creación de un PlainDateTime y su conversión a ZonedDateTime
const dt = Temporal.PlainDateTime.from('2024-07-09T12:00');
const madrid = dt.toZonedDateTime( Temporal.TimeZone.from('Europe/Madrid') );
console.log(madrid.toString());

Diferencias clave frente a Date

// Date tiene meses basados en  y mutabilidad implícita
const d = new Date(2024, , 31); // 31 de enero de 2024 (confusión frecuente)
d.setMonth(d.getMonth() + 1);
console.log(d.toISOString()); // 2024-03-02T...


// Temporal evita sorpresas: objetos inmutables y tipos explícitos
const t = Temporal.PlainDate.from('2024-01-31');
const nextMonth = t.add({ months: 1 });
console.log(nextMonth.toString()); // 2024-02-29 (manejo claro de meses)

Consejos de migración

  • Preferir PlainDate, PlainTime y PlainDateTime para valores sin zona horaria variable.
  • Usar ZonedDateTime cuando se trabajen fechas y horas con zonas horarias específicas.
  • Mantener inmutabilidad para evitar efectos secundarios inesperados durante cálculos.

Enlaces y conceptos clave

  • Temporal.PlainDate, Temporal.PlainTime, Temporal.PlainDateTime
  • Temporal.ZonedDateTime para zonas horarias
  • Temporal.Now y Temporal.Instant para instantes precisos
  • Conversión entre instantes y zonas horarias con toZonedDateTimeISO o toZonedDateTime

Si se desea, puedo adaptar este contenido para un formato específico (guía paso a paso, fragmentos reutilizables en snippets, o una versión enfocada a migración desde Date).

#JavaScript #NodeJS #NodeJS26 #Temporal #WebDevelopment #Programacion #DesarrolloWeb #Frontend #Backend #ECMAScript #Codigo #Developer #DevLife #SoftwareEngineerin

Puedes invitarme un café para que siga trabajando duro
Comentarios 0 comentarios

No hay comentarios para esta entrada.

Deja una respuesta

Tu dirección de correo no será publicada.