JavaScript dijo adiós a `Date`


El objeto Date ha sido una herramienta fundamental para trabajar con fechas y horas en JavaScript desde hace más de 25 años. Sin embargo, este objeto tiene muchas limitaciones y problemas que han llevado a la comunidad a buscar una mejor alternativa. Es aquí donde entra la nueva API Temporal, que llega para solucionar los errores históricos de Date y proporcionar una manera más poderosa y flexible de manejar el tiempo en JavaScript.

Problemas del objeto ‘Date’

El objeto Date de JavaScript tiene varias limitaciones y problemas bien conocidos:

  • Mutabilidad: Los objetos Date pueden ser modificados después de su creación, lo que puede generar errores inesperados en el código.
  • Zona horaria por defecto: Date utiliza la zona horaria del sistema, lo que puede causar problemas al manejar fechas en diferentes regiones.
  • Inexactitud: Algunos cálculos de fechas pueden ser imprecisos debido a cómo Date maneja los husos horarios y los cambios de horario de verano.
  • APIs confusas: Métodos como getMonth() (que devuelve un valor basado en 0) pueden generar confusión.
  • Manejo de zonas horarias: Trabajar con zonas horarias en Date es complicado y poco intuitivo.

Introduciendo ‘Temporal’

La API Temporal es una nueva forma de manejar fechas y horas en JavaScript. Fue diseñada para ser más precisa, inmutable y flexible que Date. Además, corrige muchos de los problemas mencionados anteriormente.

¿Por qué “Temporal”?

El nombre “Temporal” proviene del hecho de que la API maneja valores de tiempo de manera precisa y confiable. A diferencia de Date, los objetos Temporal son inmutables, lo que significa que una vez creados, no pueden ser modificados.

Ventajas de ‘Temporal’ sobre ‘Date’

  • Inmutabilidad: Los objetos no cambian después de ser creados.
  • Soporte nativo para zonas horarias: Se pueden manejar fechas en cualquier huso horario sin problemas.
  • Manejo más preciso del tiempo: Evita errores de redondeo y problemas con horarios de verano.
  • APIs más claras y predecibles: Métodos más intuitivos y fáciles de usar.

Cómo usar ‘Temporal’

Aquí algunos ejemplos básicos para ilustrar cómo se usa Temporal.

Creación de una fecha

// Con Date
const fechaAntigua = new Date(2024, 2, 5);
console.log(fechaAntigua);
// Con Temporal
const fechaNueva = Temporal.PlainDate.from({ year: 2024, month: 3, day: 5 });
console.log(fechaNueva);

Agregar un día a una fecha

// Con Date (mutando el objeto)
fechaAntigua.setDate(fechaAntigua.getDate() + 1);
console.log(fechaAntigua);
// Con Temporal (sin mutar el objeto original)
const nuevaFecha = fechaNueva.add({ days: 1 });
console.log(nuevaFecha);

Conversión de zona horaria

// Con Date (complicado y poco intuitivo)
const fechaUTC = new Date("2024-03-05T12:00:00Z");
console.log(fechaUTC.toLocaleString("es-MX", { timeZone: "America/Mexico_City" }));
// Con Temporal (sencillo y directo)
const fechaTemporal = Temporal.ZonedDateTime.from("2024-03-05T12:00:00[UTC]");
const fechaMexico = fechaTemporal.withTimeZone("America/Mexico_City");
console.log(fechaMexico);

Cálculo de duración

// Con Date (propenso a errores)
const inicio = new Date(2024, 2, 5);
const fin = new Date(2024, 2, 10);
const diferencia = fin - inicio;
console.log(diferencia / (1000 * 60 * 60 * 24) + " días");
// Con Temporal (preciso y claro)
const duracion = Temporal.PlainDate.from({ year: 2024, month: 3, day: 10 }).since(fechaNueva);
console.log(duracion.days + " días");

Soporte en navegadores

La API Temporal aún no está disponible en todos los navegadores de forma nativa, pero se puede usar a través de un polyfill proporcionado por el equipo de TC39. Puedes revisar la compatibilidad actual en Can I Use.

Si quieres usar Temporal en un entorno que aún no lo soporta, puedes instalar el polyfill:

Terminal window
npm install @js-temporal/polyfill

Y luego importarlo en tu código:

import { Temporal } from '@js-temporal/polyfill';

Conclusión

La API Temporal representa un gran avance en la gestión de fechas y tiempos en JavaScript. Con su enfoque inmutable, preciso y flexible, promete reemplazar a Date y hacer que el trabajo con fechas sea mucho más sencillo y seguro.

Si aún no has probado Temporal, ¡este es el momento perfecto para hacerlo! 🚀