-
Comienza el lanzamiento de JavaScript Temporal
- La implementación del nuevo objeto
Temporal de JavaScript está comenzando a incluirse en las versiones experimentales de los navegadores. Esta es una gran noticia para los desarrolladores web, ya que el manejo de fechas y horas en JavaScript se simplificará y modernizará enormemente.
- Las aplicaciones que dependen de la gestión de agendas, la internacionalización y los datos sensibles al tiempo podrán usar funciones integradas para manejar fechas, horas, duraciones y calendarios de forma eficiente, precisa y consistente.
- Aún falta bastante para contar con soporte estable entre navegadores, y podría haber cambios a medida que evolucione la implementación, pero ya es posible revisar Temporal actual y entender por qué existe y qué problemas resuelve.
- En MDN se agregaron esta semana más de 270 páginas de documentación sobre Temporal, con explicaciones detalladas y ejemplos.
-
¿Qué es JavaScript Temporal?
- Para entender Temporal, se puede revisar el objeto
Date de JavaScript. Cuando JavaScript fue creado en 1995, el objeto Date fue copiado de la implementación inicial y defectuosa de java.util.Date en Java.
- Java reemplazó esa implementación en 1997, pero JavaScript ha estado atrapado con la misma API durante casi 30 años.
- El principal problema del objeto
Date de JavaScript es que solo admite la hora local del usuario y UTC, sin soporte de zonas horarias. Además, el comportamiento de parsing es muy poco confiable, y Date en sí es mutable, lo que puede provocar errores difíciles de rastrear.
- Todos estos problemas hacen que manejar fechas y horas en JavaScript sea complejo y propenso a errores. La mayoría de los desarrolladores dependen de bibliotecas como Moment.js y date-fns para manejar mejor fechas y horas en sus aplicaciones.
- Temporal fue diseñado para reemplazar por completo al objeto
Date, haciendo que la gestión de fecha y hora sea confiable y predecible. Temporal admite representación de zonas horarias y calendarios, y agrega muchos métodos integrados para conversión, comparación, cálculos, formateo y más.
-
Conceptos clave
- Los conceptos clave en Temporal son el instante (un punto único en la historia), la hora de pared (hora local) y la duración. Para manejar estos conceptos, la API tiene la siguiente estructura:
- Duración:
Temporal.Duration, la diferencia entre dos puntos en el tiempo
- Puntos en el tiempo:
- Punto único en el tiempo:
- Como timestamp:
Temporal.Instant
- Fecha-hora con zona horaria:
Temporal.ZonedDateTime
- Fecha/hora independiente de la zona horaria ("Plain"):
- Fecha y hora completas:
Temporal.PlainDateTime
- Solo fecha:
Temporal.PlainDate
- Año y mes:
Temporal.PlainYearMonth
- Mes y día:
Temporal.PlainMonthDay
- Solo hora:
Temporal.PlainTime
- Ahora: usa
Temporal.now para obtener la hora actual en varias instancias de clase o en formatos específicos
-
Ejemplos de Temporal
- Algunos de los usos más básicos de Temporal consisten en obtener la fecha y la hora actuales como una cadena ISO. Ahora muchos métodos pueden recibir una zona horaria, lo que evita tener que hacer cálculos complejos manualmente.
- Trabajar con distintos calendarios también se simplifica, por lo que se pueden crear fechas en sistemas de calendario distintos al gregoriano, como el hebreo, el chino o el islámico.
- Trabajar con timestamps Unix es un caso de uso muy común, ya que muchos sistemas (APIs, bases de datos) usan ese formato para representar el tiempo.
- El método
compare() permite ordenar duraciones de manera elegante y eficiente.
-
Probar Temporal y soporte en navegadores
- El soporte ha comenzado a incorporarse lentamente en versiones experimentales de navegadores, y Firefox es el que actualmente tiene la implementación más madura.
- En Firefox, Temporal ya viene integrado en Nightly detrás de la preferencia
javascript.options.experimental.temporal.
- Con la llegada de implementaciones experimentales, es un buen momento para probar Temporal y familiarizarse con un enfoque moderno para manejar fechas y horas en JavaScript.
-
Agradecimientos
- Agradecimientos a Eric Meyer por su trabajo en este tema. Ya han pasado cerca de 4 años desde que Eric documentó los datos de compatibilidad de navegadores y organizó la documentación en un fork de mdn/content.
- Joshua Chen tomó la posta de Eric y preparó el pull request para la documentación de MDN.
- Agradecimientos a André Bargull por su trabajo en la implementación de Temporal en Firefox.
1 comentarios
Opiniones de Hacker News
Temporal es útil para resolver los problemas del API existente de Date(). Ofrece un API conveniente inspirado en bibliotecas de tiempo de alta calidad como chrono de Rust y Joda Time de Java
Se puede convertir la zona horaria usando Temporal.ZonedDateTime.prototype.withTimeZone()
formatpersonalizadaLa propuesta de Temporal es buena, pero es una lástima que use igualdad por referencia al comparar
En TC39 se están desarrollando muchas funciones, y ojalá Temporal salga pronto
Hay curiosidad sobre cómo Temporal actualiza los datos de zona horaria
Se sugiere agregar eventos cuando cambie la zona horaria
El nombre Temporal se usó para evitar conflictos con objetos de tiempo genéricos, pero al principio podría malinterpretarse como control de recolección de basura
La clase Carbon de PHP, al heredar de DateTime, ilustra los problemas de trabajar con marcas de tiempo mutables
Hay varios artículos y debates relacionados con JavaScript Temporal