2 puntos por GN⁺ 2025-01-31 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2025-01-31
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

    • El tiempo es complejo, y Temporal lo maneja distinguiendo entre tiempo ingenuo, instante y tiempo con zona horaria
    • Al sumar un día a una marca de tiempo, hay que decidir si se hace en hora local de una zona específica. De lo contrario, pueden aparecer errores durante el DST o cambios de zona horaria
    • También resuelve problemas de serialización entre marcas de tiempo de "desplazamiento fijo" y marcas de tiempo de una zona horaria específica
  • Se puede convertir la zona horaria usando Temporal.ZonedDateTime.prototype.withTimeZone()

    • La conversión de zona horaria y el manejo de duraciones son funciones importantes que la biblioteca debería cubrir, y Temporal se encarga de ello
    • Sin embargo, Temporal.Duration no ofrece una función format personalizada
  • La propuesta de Temporal es buena, pero es una lástima que use igualdad por referencia al comparar

    • Esto elimina la posibilidad de usar objetos como claves de Map o de recopilarlos en un Set
  • En TC39 se están desarrollando muchas funciones, y ojalá Temporal salga pronto

    • Hace falta trabajo de desarrollo para que los principales navegadores admitan nuevas funciones
  • Hay curiosidad sobre cómo Temporal actualiza los datos de zona horaria

    • Si el usuario no actualiza el navegador, podría ver horas incorrectas
  • Se sugiere agregar eventos cuando cambie la zona horaria

    • Muchas personas se mueven entre zonas horarias todos los días
  • 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

    • Se recomienda usar CarbonImmutable para devolver siempre una nueva instancia
    • Se sugiere una forma de importar CarbonImmutable y Carbon con alias en Laravel
  • Hay varios artículos y debates relacionados con JavaScript Temporal