Temporal: Fechas y Tiempos Modernos en JavaScript

This ad is not shown to multipass and full ticket holders
JSNation US
JSNation US 2025
November 17 - 20, 2025
New York, US & Online
See JS stars in the US biggest planetarium
Learn More
In partnership with Focus Reactive
Upcoming event
JSNation US 2025
JSNation US 2025
November 17 - 20, 2025. New York, US & Online
Learn more
Bookmark
SlidesGithub
Rate this content

¿Alguna vez has sido engañado por una de las muchas trampas del objeto JS Date? ¿Agrupas datos de zona horaria? ¡Entonces echa un vistazo a Temporal! Temporal es una propuesta de TC39 que actualmente se está implementando en motores JS, que trae un mejor manejo de fechas y tiempos, y conciencia de zonas horarias, a JS. Esta charla es un recorrido por lo que necesitas saber sobre Temporal, pasando por una tarea simple, una media y una complicada, cada una resuelta con Temporal.

This talk has been presented at JSNation US 2024, check out the latest edition of this JavaScript Conference.

 Philip Chimento
Philip Chimento
22 min
21 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Hoy hablaré sobre la propuesta temporal, que agrega manejo moderno de fechas y tiempos a JavaScript. Temporal es una API que estará disponible en navegadores pronto y agregará una biblioteca incorporada para fechas y tiempos, evitando la necesidad de bibliotecas externas como Moment. Ofrece una tipificación fuerte con diferentes tipos para diferentes datos, como fechas de calendario con o sin tiempo. Los objetos Temporal son inmutables y están diseñados para trabajar con las instalaciones de internacionalización de JavaScript. Aborda deficiencias en el objeto global date e introduce tipos como instant y tipos plain para una representación precisa de tiempo y fechas a través de zonas horarias. Con el antiguo date, representar una fecha sin un tiempo puede ser problemático, especialmente en zonas horarias donde la medianoche se omite debido al horario de verano. Temporal introduce tipos como plain date, plain time, plain year month, plain month day y zone date time para representar con precisión diferentes escenarios. Además, hay un tipo llamado duration para operaciones aritméticas y conversión de unidades. Ahora que te he presentado a los personajes de temporal, es hora de mostrar cómo realizar una tarea de programación. Comenzaremos con una tarea fácil: obtener la hora actual como una marca de tiempo en milisegundos usando el tipo instant. Para convertir entre tipos Temporal, puedes eliminar o agregar información. El método two zone date time se utiliza para la conversión y requiere agregar una zona horaria y un tiempo. Aunque los objetos Temporal son inmutables, puedes crear nuevos objetos con componentes reemplazados usando el método with. Migrar del antiguo objeto date a Temporal ofrece una solución más confiable y evita posibles errores. ¡Consulta la documentación para más detalles y disfruta usando Temporal en tu base de código!

1. Introducción a la Propuesta Temporal

Short description:

Hoy hablaré sobre la propuesta temporal, que añade un manejo moderno de fechas y horas a JavaScript. Temporal es una API que estará disponible pronto en los navegadores y añadirá una biblioteca incorporada para fechas y horas, evitando la necesidad de bibliotecas externas como Moment. Ofrece una tipificación fuerte con diferentes tipos para diferentes datos, como fechas de calendario con o sin hora.

Hola, mi nombre es Philip Camento. Trabajo como desarrollador de motores de JavaScript en Igalia. Hoy hablaré sobre la propuesta temporal, que añade un manejo moderno de fechas y horas a JavaScript. Soy parte de un grupo que trabaja en esta propuesta, y mi participación es parte de una colaboración entre Igalia y Bloomberg.

En esta presentación, te daré un recorrido por la API y te mostraré lo que puedes hacer con temporal mediante una caminata a través de una tarea de programación fácil, media y complicada. Entonces, si te preguntas qué es temporal, es una API que ha sido propuesta para convertirse en parte de JavaScript. Estará disponible pronto en los navegadores. Y añadirá una biblioteca incorporada para fechas y horas, como ya tienen muchos otros lenguajes de programación.

Entonces, cuando digo que está incorporada, me refiero a que es parte de tu navegador o de tu motor de JavaScript. Eso es importante porque muchos desarrolladores incluyen una dependencia de Moment o alguna biblioteca similar en su aplicación para lograr lo mismo que podrías con temporal. Pero dependiendo de cuánta información local incluyas, eso podría añadir una carga de entre una docena a 200 kilobytes a tu aplicación. Y con incorporado, evitas eso. Temporal está fuertemente tipificado. Eso significa que para diferentes tipos de datos, como una fecha de calendario con o sin una hora asociada, hay diferentes tipos para representarlos, en lugar de un tipo que se ajuste a todo.

2. Explorando Tipos Temporales y Deficiencias

Short description:

Los objetos Temporal son inmutables y están diseñados para trabajar con las facilidades de internacionalización de JavaScript. Aborda deficiencias en el objeto global de fecha e introduce tipos como instant y tipos plain para una representación precisa del tiempo y las fechas a través de zonas horarias.

Los objetos Temporal son inmutables, y eso significa que no tienes que preocuparte por el código que no posees modificando tus objetos sin tu conocimiento. Y por último, está diseñado para trabajar junto con las facilidades de internacionalización de JavaScript. Y proporciona cosas que muchas otras bibliotecas no, como calendarios no gregorianos.

Entonces, una pregunta justa para cualquier adición al lenguaje JavaScript es, ¿realmente necesitamos esto? Como, ya tenemos el objeto global de fecha. No es perfecto, pero ha funcionado bien durante todos estos años. Y voy a estar en desacuerdo con lo que acabo de decir. De hecho, tenemos una buena lista de deficiencias de fechas. Aquí hay una lista de problemas con las fechas que se identificaron desde el principio que Temporal apunta a resolver.

Puedes leer sobre estos en la publicación del blog que enlacé por Maggie Johnson-Pint, una de las desarrolladoras de Moment y también una de las arquitectas originales de Temporal. Así que, ella enumera estas cosas en su publicación de blog en orden de disgusto relativo, para usar sus palabras. No entraré en todos estos. Algunos de ellos, como las APIs poco manejables, podrían ser arreglados, pero otros como la mutabilidad no pueden ser arreglados sin romper la web, porque hay tanto código por ahí que ya depende del comportamiento existente.

La fecha original de JavaScript se basó en una clase de fecha de Java, que Java desaprobó en 1997 y reemplazó por algo mejor. Y un cuarto de siglo después, ahora estamos haciendo lo mismo en JavaScript. Así que, mencioné la tipificación fuerte. Para las próximas diapositivas, te daré un recorrido por estos tipos que Temporal introduce. El primer tipo que debes conocer es instant. Representa lo que llamamos un tiempo exacto, un punto instantáneo en la línea de tiempo con resolución de nanosegundos. No hay calendario, así que no hay meses, semanas, años, o días, solo zona horaria.

Sin zona horaria, así que no hay ajustes de horario de verano. Solo un número en constante aumento. A continuación, tenemos una familia de tipos llamados los tipos plain. Estos representan una fecha en tu calendario de pared y una hora en tu reloj de pared, a lo que llamamos tiempo de pared para abreviar. Estos representan tu fecha y hora local independientemente de la zona horaria, y por lo tanto no hay ajustes de horario de verano. Pero a diferencia de instant, no son momentos exactos en el tiempo. Un tiempo de pared como el 18 de noviembre de 2024 a las 2.30 ocurre en varios momentos exactos diferentes alrededor del mundo. Así que, esto es solo puramente los números que ves en tu pared. Entonces, ¿por qué tenemos esta familia de tipos plain o tipos de pared con progresivamente menos información? Esto es para que puedas representar correctamente la información que tienes.

3. Temporal Types and Relationships

Short description:

Con la antigua fecha, representar una fecha sin una hora puede ser problemático, especialmente en zonas horarias donde se omite la medianoche debido al horario de verano. Temporal introduce tipos como plain date, plain time, plain year month, plain month day y zone date time para representar con precisión diferentes escenarios. Además, hay un tipo llamado duration para operaciones aritméticas y conversión de unidades. Las relaciones entre estos tipos se ilustran en un diagrama. Ahora, pasemos a las tareas de programación.

Por ejemplo, con la antigua fecha, si querías representar una fecha sin una hora, podrías usar medianoche en la zona horaria local del usuario. Pero en realidad hay días en ciertas zonas horarias donde se omite la medianoche debido al horario de verano. Eso puede causar errores difíciles de rastrear cuando intentas poner medianoche para uno de esos días. {{^}}Por ejemplo, la medianoche del 4 de noviembre de 2018 no existió en Brasil. Así que, el 4 de noviembre de 2018 es un dato diferente al 4 de noviembre de 2018 a las 12 a.m.

Así que, aquí están los tipos que tenemos que no llevan toda la información. Plain date es un día sin una hora específica del reloj, lo cual es un caso de uso muy común. Plain time es una hora del reloj no en un día específico. Plain year months es un mes sin un día específico. Así que, podrías pensar en usar eso para referirte a un evento que ocurre ocasionalmente, como tengo aquí la reunión de la junta de noviembre de 2024. También corresponde al tipo de entrada HTML month. Y plain month day es una fecha de calendario pero sin un año específico. Así que, podrías pensar en eso como referirse a un cumpleaños o aniversario o algo así. Como digo, mi cumpleaños es el 15 de diciembre.

Completando la familia de tipos hay otro tipo de tiempo exacto llamado zone date time. Al igual que instant, este tipo representa un momento exacto en el tiempo pero también está acoplado a una ubicación con reglas de zona horaria porque incluye una zona horaria. La zona horaria significa que este tipo sí tiene en cuenta los cambios de horario de verano y otros cambios en la zona horaria. Y también tiene un calendario, lo que significa que a diferencia de instant, tiene un año, mes y día. Así que, es un tiempo exacto, pero también puede darte convenientemente un tiempo completo. Decimos que zone date time representa un evento de calendario que ocurrió o ocurrirá en un lugar en la Tierra.

Así que, un ejemplo de los datos completos es decir que la sesión de la conferencia es el lunes, 18 de noviembre de 2024 a las 11 AM hora estándar del este de EE. UU. Luego hay un tipo más que es parte de temporal y no representa una fecha o una hora. Duration, lo usamos en aritmética con los otros tipos y tiene algunos métodos propios para redondear y convertir entre unidades. Así que, aquí están las relaciones entre todos los tipos. Este diagrama está tomado de la documentación de temporal. Puedes ver que hay dos tipos a la izquierda que conocen el tiempo exacto, instant y zone date time. Y hay otros tipos a la derecha que conocen el tiempo completo.

4. Accomplishing a Programming Task with Temporal

Short description:

Ahora que te he presentado a los personajes de Temporal, es hora de mostrar cómo realizar una tarea de programación. Comenzaremos con una tarea fácil: obtener la hora actual como un timestamp en milisegundos usando el tipo instant. Usamos las funciones en el namespace now para obtener la hora actual como una instancia y luego recuperar el número de milisegundos desde la época Unix del instant.

Ahora que te he presentado a los personajes de Temporal, es hora de mostrar cómo realizar una tarea de programación. Personalmente, siempre he aprendido mejor haciendo. Así que, espero que esto te muestre lo que puedes hacer con cAPI. He elegido tres tareas para recorrer, una fácil, una media y una complicada. Primero, la fácil.

La tarea fácil es obtener la hora actual como el timestamp en milisegundos. Esta es la pregunta número uno más votada para el antiguo objeto de fecha de JavaScript en Stack Overflow. Así que, naturalmente, querremos poder hacer lo mismo en Temporal. Primero, consideramos qué tipo tenemos que usar. Un timestamp representa un tiempo exacto sin tener en cuenta las zonas horarias. Y así, pensamos en los tipos que mencioné. El tipo que corresponde a ese tiempo exacto, sin zona horaria, es instant.

Lo siguiente, tal vez es algo un poco meta para considerar, es si realmente queremos un timestamp en milisegundos, o si el objeto instant funcionará igual de bien. Creo que en el futuro, a medida que Temporal se adopte más ampliamente, esperaría que los timestamps numéricos sean principalmente necesarios para la interoperación con sistemas no JavaScript, no tanto para aplicaciones JavaScript donde simplemente usaremos instant. Pero para el propósito de este ejemplo, digamos que realmente necesitamos un timestamp numérico. Así que, sabemos qué tipo necesitamos. A continuación, necesitamos saber cómo llenarlo con la hora actual.

Hacemos esto con las funciones en el namespace now. Cualquiera de estas funciones te dará la fecha o la hora o la zona horaria actual en forma de una instancia de uno de los tipos de Temporal. El ISO en el nombre significa que la fecha está en el calendario estándar ISO, y hablaré más sobre calendarios y lo que eso significa más adelante. Pero como necesitamos la hora actual como una instancia, usaremos la primera de esta lista, temporal.now.instant. A continuación, necesitamos averiguar cómo obtener un número de milisegundos desde la época Unix del instant.

Así que, este es un buen momento para hablar sobre cómo obtienes información de fecha y hora de tus instancias de tipos de Temporal. Todos los tipos tienen propiedades de solo lectura que podemos usar para obtener este tipo de información. Así que, aquí en esta diapositiva hay una lista completa de estas propiedades. No todos los tipos tienen todas las propiedades, solo las que tienen sentido para ese tipo. Así que, por ejemplo, year solo está en tipos que tienen calendarios y tampoco en plain month-day. Offset solo existe en zone date-time, y los epoch nanoseconds y propiedades similares solo están en los tipos de tiempo exacto en zone date-time. Así que, en nuestro caso, necesitamos la propiedad epoch milliseconds porque ese es el número de milisegundos desde la época Unix del 1 de enero de 1970, medianoche.

5. Calculating the Date One Month from Today

Short description:

Entonces, juntamos toda la información de las diapositivas anteriores en esta línea de código aquí. Obtenemos el resultado de temporal.now.instant y examinamos su propiedad epoch milliseconds para obtener un timestamp Unix en milisegundos. La tarea media es determinar la fecha de un mes a partir de hoy. Para añadir un mes a una fecha, usamos el método add y pasamos una duración de un mes. La variable date se obtiene usando el método now.plain date ISO, que se basa en el calendario ISO. El calendario ISO es adecuado para el cálculo y no tiene dependencia regional o de idioma.

Entonces, juntamos toda la información en las diapositivas anteriores en esta línea de código aquí. Obtenemos el resultado de temporal.now.instant y examinamos su propiedad epoch milliseconds para obtener un timestamp Unix en milisegundos.

Y aquí hay una posible salida, dependiendo de cuándo llames al método.

Así que, esa fue la tarea fácil. Ahora para la tarea media. Entonces, la pregunta que tenemos que responder para la tarea media es, ¿cuál es la fecha de un mes a partir de hoy? Así que, ya vimos en la tarea anterior cómo averiguar cuál es la fecha de hoy. Solo usas una función diferente del namespace now. Así que, saltemos eso por el momento, aunque hablaré más sobre cómo interactúa con los calendarios en un momento.

¿Cómo añadimos un mes a una fecha? Este es un buen momento para echar un vistazo a cómo hacer aritmética con fechas y horas en temporal. Mencioné duration hace unas diapositivas, y mencioné métodos aritméticos. Estos son los métodos aritméticos. Tenemos add y subtract para sumar o restar una duración de otro tipo. Y también tenemos since y until que determinan el tiempo transcurrido como una duración entre dos objetos del mismo tipo. Así que, en nuestro caso, usamos el método add. Queremos tomar una fecha y añadir una duración de un mes. Le pasamos un property bag, que se convierte automáticamente en una duración, para que no tengamos que llamar al constructor de duration aquí en esta línea de código.

Entonces, esta variable date, ¿de dónde viene? Ya necesitamos saber que necesitamos usar uno de los métodos now, específicamente now.plain date ISO. Y aquí es donde dije que el tema ISO iba a volver. Así que, un poco sobre calendarios. El calendario ISO se puede considerar como el calendario de la máquina. La forma en que funciona está estandarizada. No tiene dependencia regional o de idioma. Es adecuado para el cálculo. El calendario gregoriano es un calendario humano que se utiliza en gran parte del mundo con variaciones menores, pero es en lo que se basa el calendario ISO. Son lo suficientemente similares como para que puedas cambiar mentalmente entre los dos sin tener que hacer cálculos mentales. Sin embargo, una gran parte del mundo usa el calendario gregoriano, pero eso no significa que todo el mundo lo use. Algunas regiones no lo hacen, y en algunas regiones, las personas usan el calendario gregoriano para fines comerciales y otro calendario para fines religiosos. Así que, ya sin temporal, puedes imprimir un objeto de fecha antiguo de JavaScript en un calendario no gregoriano si el usuario lo desea. Así que, eso es suficiente para algunas aplicaciones, pero no es bueno para responder a esta pregunta, porque cuánto dura un mes depende de qué mes estás hablando en qué calendario. Puedo ilustrar eso.

6. Calculating Dates and Conference Sessions

Short description:

Aquí tienes un ejemplo de cómo el cálculo de fechas puede salir mal al usar el old date. Añadir un mes del calendario ISO a una fecha e imprimirlo en otro calendario es insuficiente. Se debe usar el calendario preferido del usuario al trabajar con las fechas que ven. Para obtener la fecha de un mes a partir de hoy, define el calendario deseado, obtén la fecha de hoy en ese calendario, añade un mes y formatea para el usuario. La tarea complicada implica determinar los horarios de las sesiones de la conferencia, teniendo en cuenta las zonas horarias y las diferencias en los calendarios. El enfoque fuertemente tipado en Temporal simplifica este proceso al permitir conversiones y cálculos de datos precisos. La conferencia tiene lugar el 23 y 30 de julio de 2025, con tres sesiones cada día.

Aquí tienes un ejemplo de cómo podría salir mal usando el old date. Digamos que la fecha de hoy en el calendario gregoriano es el 9 de octubre. Un mes después es el 9 de noviembre. En el calendario hebreo, estas dos fechas no están separadas por un mes este año. Están separadas por un mes y un día porque los meses tienen longitudes diferentes que en el calendario gregoriano. Así que, no es suficiente solo añadir un mes del calendario ISO y imprimir las fechas en otro calendario. Tienes que considerar realmente el calendario al realizar la adición.

Así que, la conclusión aquí es que cuando trabajas con fechas que el usuario verá, usa el calendario preferido del usuario, no el calendario ISO de la máquina. Así que, si juntamos todo eso, la forma de obtener la fecha de un mes a partir de hoy es, en primer lugar, definir exactamente a qué mes te refieres eligiendo el calendario. Puedes obtener el calendario de las preferencias del usuario en tu aplicación, por ejemplo, o de su configuración regional usando el método resolved options de Intel dot date time format. Aunque eso es una buena aproximación, no siempre corresponde a lo que el usuario realmente quiere. Y luego puedes obtener la fecha de hoy en ese calendario usando now dot plain date ISO, poner el calendario en él usando el método with calendar. Luego puedes añadir un mes usando el método add, y luego puedes formatearlo para el usuario con el método to locale string.

Así que, aquí tienes un ejemplo de cómo se ve eso en mi configuración regional. Aquí en el ejemplo de salida 2024-12-18. Muy bien, esa fue la tarea complicada. O ahora esa fue la tarea media. Ahora para la tarea complicada. Para esta tarea, necesitamos responder a la pregunta usando la información en este sitio web de la conferencia. ¿A qué horas ocurren estas sesiones para mí? ¿A qué sesiones puedo asistir cuando no estoy dormido? Así que, algo curioso, me hubiera encantado usar el sitio web de JS Nation US para esto, pero convenientemente ya pone las sesiones en la zona horaria local de tu navegador. Así que, bien hecho en eso. Tuve que elegir un sitio web de conferencia diferente que no hiciera eso. Pero vamos a pretender que estas son sesiones de JS Nation US. Así que, esta pregunta resulta ser sorprendentemente difícil de responder si no usamos una computadora, porque requiere muchas acrobacias mentales con las zonas horarias y restar o añadir horas.

7. Time Zone Conversion and Session Calculation

Short description:

La mayoría de las personas confían en los motores de búsqueda para convertir zonas horarias, pero el enfoque fuertemente tipado de Temporal resuelve este problema al permitir conversiones de datos precisas. La conferencia tiene lugar el 23 y 30 de julio de 2025, con tres sesiones cada día. Las horas de inicio están en diferentes zonas horarias, y conozco mi propia zona horaria y las horas disponibles. Usando una expresión en pseudocódigo, podemos determinar los horarios de las sesiones y verificar si estoy despierto para cada sesión. Los nombres de las zonas horarias en Temporal utilizan identificadores oficiales de la base de datos de zonas horarias de IANA.

Así que, la mayoría de las personas, incluyéndome a mí, simplemente, ya sabes, si queremos saber qué hora es 11 en punto AEST en mi zona horaria, simplemente lo pondré en un motor de búsqueda y esperaré que el motor de búsqueda corrija la suposición de lo que quiero. Pero el enfoque fuertemente tipado que tenemos en Temporal es perfecto para resolver este problema, porque puedes determinar el tipo basado en los datos que tienes, y luego puedes determinar a qué tipo convertirlo basado en los datos que necesitas.

Así que, aquí están los hechos que conocemos. Sabemos por el sitio web las dos fechas del calendario de la conferencia, 23 y 30 de julio. Obtuve la captura de pantalla de una conferencia pasada, pero digamos para este ejemplo, que las fechas son en 2025. Luego hay tres sesiones en cada día de conferencia. Conocemos las horas de inicio locales de cada una de las tres sesiones y en qué zonas horarias se dan esas horas de inicio locales. Así que, son las 11 a.m. AEST, mediodía BST, y 1 p.m. EDT. Luego también conozco mi zona horaria, y conozco las horas en mi zona horaria local durante las cuales estoy dispuesto a estar en línea viendo una conferencia.

Así que, aquí hay una expresión en pseudocódigo de lo que necesitamos hacer. Para cada fecha y cada sesión, conocemos la hora de pared y la zona horaria, lo que nos permite averiguar la hora exacta en que la sesión comienza y termina. Luego necesitamos ir de esa hora exacta de regreso a la hora de pared en mi zona horaria local para verificar si estoy despierto o no. Si estoy despierto, entonces imprimimos esa sesión. Aquí está la primera parte del código donde configuramos las cosas. Tenemos las fechas del calendario, las zonas horarias de las sesiones, y las horas de inicio. Tenemos la duración de las sesiones, y tenemos mi zona horaria. Así que, mi zona horaria la obtenemos de otro método now. La duración de la sesión es una duración. Y las fechas son fechas simples. Así que, para este cálculo, está bien usar el calendario ISO para las fechas porque estoy calculando mis tiempos de vigilia en el calendario ISO también. Ahora, hay algunas cosas que explicar aquí. Una de ellas es cómo determino estos nombres de zonas horarias. Estaba mencionando las abreviaturas como AEST y BST en la diapositiva anterior. En el sitio web, teníamos los nombres completos, Australia, Eastern Standard Time, British Summer Time, y Eastern Daylight Time con América del Norte implícita en el último. Esos son nombres humanos, no identificadores de máquina. Estas cadenas con las barras aquí en esta diapositiva, como Australia slash Brisbane, esos son los identificadores oficiales de la base de datos de zonas horarias de IANA. Así es como te refieres a las zonas horarias en Temporal. Si no conoces el identificador de una zona horaria en particular, generalmente puedes encontrar en Wikipedia o consultar la base de datos.

8. Creación de Objetos Temporal y Conversión de Zonas Horarias

Short description:

Los identificadores en Temporal son siempre precisos, a diferencia de las abreviaturas humanas que pueden ser ambiguas. Para crear un objeto Temporal, se recomienda usar los métodos de fábrica llamados from, ya que son de alto nivel y aceptan varios tipos de datos. Sin embargo, si tienes los datos exactos en el formato correcto, puedes usar el constructor. Las comparaciones entre objetos Temporal se pueden hacer usando el método estático compare, y el método equals se utiliza para verificar la igualdad. El código para el cálculo real implica convertir la hora de la sesión de la conferencia a la zona horaria del usuario y agregar la duración de la sesión.

A veces, las abreviaturas humanas son ambiguas. Pero los identificadores son siempre precisos. Así que, la siguiente pregunta es, ¿por qué estamos usando from para crear estos objetos? Este es un buen momento para hablar sobre cómo crear un objeto Temporal. Podrías esperar que también puedas usar un constructor para crear una instancia de un tipo Temporal. Los constructores están destinados para uso de bajo nivel donde tienes todos los datos exactamente en el formato correcto, como en estos ejemplos. Luego, por otro lado, están estos métodos de fábrica llamados from. Son de alto nivel. Aceptan muchos más tipos de datos y los convierten.

En particular, a menudo son más legibles. Como una bolsa de propiedades con el año 2019, mes 6, eso me parece más legible que solo una cadena de números. Así que, en la mayoría de los casos, recomendaría usar from para crear un objeto Temporal. Pero si tienes los datos exactos en el formato correcto, puedes usar el constructor. La otra pieza de datos que mencioné que conocemos es qué horas estoy dispuesto a estar en línea para una conferencia. Quiero escribir una pequeña función que tome una hora de reloj de pared y devuelva verdadero si la hora está dentro de mis horas en línea.

Así que, para eso, tenemos que hacer comparaciones. Cada tipo tiene un método estático compare que usamos para esto. Es un método estático, por lo que puedes no necesitas una instancia. Puedes usarlo como argumento para el método sort de arrays. Si en cambio, solo quieres el caso común de verificar si dos objetos son iguales, usa el método equals. Así que, volviendo a escribir código. Aquí está la función que te dice si puedo estar en línea. Estamos usando plain time.compare para implementarlo. Aquí estoy aprovechando el hecho de que mis horas en línea no cruzan la medianoche. Tendríamos que ser un poco más complicados para soportar el caso en que lo hicieran. Pero esto es suficiente para este ejemplo. Ahora, este código es cómo funciona el cálculo real. Anteriormente lo describí en pseudocódigo. Recorremos cada fecha de la conferencia y la información de cada sesión, y la convertimos a la hora exacta llamada inicio de sesión como un zone date time. Luego usamos el método with time zone para obtener un nuevo objeto zone date time para el inicio de la sesión en mi zona horaria en lugar de la zona horaria de la sesión de la conferencia. Luego agregamos la duración de la sesión usando el método add que conocemos para obtener el final de la sesión en mi zona horaria.

9. Temporal Conversion and Modifying Objects

Short description:

Para convertir entre tipos de Temporal, puedes eliminar o agregar información. El método two zone date time se utiliza para la conversión y requiere agregar una zona horaria y una hora. Aunque los objetos Temporal son inmutables, puedes crear nuevos objetos con componentes reemplazados usando el método with. El ejemplo de código muestra cómo formatear la respuesta con configuraciones específicas de zona horaria y configuración regional. Migrar del antiguo objeto date a Temporal ofrece una solución más confiable y evita posibles errores. ¡Consulta la documentación para más detalles y disfruta usando Temporal en tu base de código!

Estos los pasamos a nuestra función de comparación, y si están durante mis horarios en línea, imprimimos el inicio y el final de la sesión usando format range. Si estás viendo una grabación de esta charla, siéntete libre de pausarla para examinar el código con más detalle si lo deseas.

Entonces, conversión. El método two zone date time que vimos es un ejemplo de uno de los métodos para la conversión entre tipos. Para convertir de un tipo a otro, necesitas agregar información o eliminar información. Si eliminas información como el año cuando pasas de plain date a plain Wednesday, el método no toma ningún argumento. Si necesitas agregar información como la hora del reloj, el método tomará la información requerida como argumento. En nuestro caso, convertimos de plain date a zone date time, por lo que tuvimos que agregar tanto una zona horaria como una hora, que el método two zone date time toma en una bolsa de propiedades.

El otro nuevo método que viste fue with time zone, así que este es un buen momento para entrar en cómo modificar un objeto temporal. Técnicamente, no puedes modificarlos. Son inmutables, como hablamos al principio de la presentación, pero puedes obtener un nuevo objeto del mismo tipo con uno o más componentes reemplazados, y para esto es el método with. Eso toma una bolsa de propiedades con uno o más componentes para reemplazar y devuelve un nuevo objeto. Y luego tenemos métodos separados para with calendar. Ya lo viste antes durante la tarea media y with time zone, que viste en esta tarea, porque esos dos no pueden proporcionarse al mismo tiempo que cualquier otra propiedad porque sería ambiguo qué propiedad tienes que reemplazar primero.

Así que, toma ese código, ponlo todo junto, ejecútalo, y aquí está la respuesta bien formateada. Esta es la respuesta en mi zona horaria con mi formato de configuración regional con estilo de fecha completo y estilo de hora corto, y tu respuesta probablemente será diferente si vives en una zona horaria diferente o tienes una configuración regional diferente. Así que, esta es una pregunta aparentemente simple respondida en más líneas de código de las que podrías esperar, pero en serio, ni siquiera habría querido intentar escribir este código con el antiguo objeto date. Habría sido posible asegurándome cuidadosamente de que las fechas estuvieran todas en UTC y convirtiendo en consecuencia al agregar o restar manualmente el número correcto de horas, pero sería realmente susceptible a errores. Y con este, estoy bastante seguro de que obtuve la respuesta correcta. Así que, espero que hayas encontrado útil este recorrido por Temporal, y si tienes el antiguo objeto date en tu base de código, espero que estés emocionado de reemplazarlo con Temporal. Puedes consultar la documentación en este enlace aquí, y en algún momento la documentación se graduará y podrás encontrarla en MDN en su lugar, junto con el resto de los elementos integrados de JavaScript. Gracias por tu atención.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
Componentes de Full Stack
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Componentes de Full Stack
Top Content
RemixConf EU discussed full stack components and their benefits, such as marrying the backend and UI in the same file. The talk demonstrated the implementation of a combo box with search functionality using Remix and the Downshift library. It also highlighted the ease of creating resource routes in Remix and the importance of code organization and maintainability in full stack components. The speaker expressed gratitude towards the audience and discussed the future of Remix, including its acquisition by Shopify and the potential for collaboration with Hydrogen.
Depuración de JS
React Summit 2023React Summit 2023
24 min
Depuración de JS
Top Content
Debugging JavaScript is a crucial skill that is often overlooked in the industry. It is important to understand the problem, reproduce the issue, and identify the root cause. Having a variety of debugging tools and techniques, such as console methods and graphical debuggers, is beneficial. Replay is a time-traveling debugger for JavaScript that allows users to record and inspect bugs. It works with Redux, plain React, and even minified code with the help of source maps.
Haciendo JavaScript en WebAssembly Rápido
JSNation Live 2021JSNation Live 2021
29 min
Haciendo JavaScript en WebAssembly Rápido
Top Content
WebAssembly enables optimizing JavaScript performance for different environments by deploying the JavaScript engine as a portable WebAssembly module. By making JavaScript on WebAssembly fast, instances can be created for each request, reducing latency and security risks. Initialization and runtime phases can be improved with tools like Wiser and snapshotting, resulting in faster startup times. Optimizing JavaScript performance in WebAssembly can be achieved through techniques like ahead-of-time compilation and inline caching. WebAssembly usage is growing outside the web, offering benefits like isolation and portability. Build sizes and snapshotting in WebAssembly depend on the application, and more information can be found on the Mozilla Hacks website and Bike Reliance site.
¿Webpack en 5 años?
JSNation 2022JSNation 2022
26 min
¿Webpack en 5 años?
Top Content
In the last 10 years, Webpack has shaped the way we develop web applications by introducing code splitting, co-locating style sheets and assets with JavaScript modules, and enabling bundling for server-side processing. Webpack's flexibility and large plugin system have also contributed to innovation in the ecosystem. The initial configuration for Webpack can be overwhelming, but it is necessary due to the complexity of modern web applications. In larger scale applications, there are performance problems in Webpack due to issues with garbage collection, leveraging multiple CPUs, and architectural limitations. Fixing problems in Webpack has trade-offs, but a rewrite could optimize architecture and fix performance issues.
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Node Congress 2022Node Congress 2022
34 min
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Top Content
There is a need for a standard library of APIs for JavaScript runtimes, as there are currently multiple ways to perform fundamental tasks like base64 encoding. JavaScript runtimes have historically lacked a standard library, causing friction and difficulty for developers. The idea of a small core has both benefits and drawbacks, with some runtimes abusing it to limit innovation. There is a misalignment between Node and web browsers in terms of functionality and API standards. The proposal is to involve browser developers in conversations about API standardization and to create a common standard library for JavaScript runtimes.

Workshops on related topic

Domina los Patrones de JavaScript
JSNation 2024JSNation 2024
145 min
Domina los Patrones de JavaScript
Top Content
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Durante esta masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debería conocer. A través de ejercicios prácticos, ejemplos del mundo real y discusiones interactivas, los asistentes profundizarán su comprensión de las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables. Al final de la masterclass, los participantes ganarán una nueva confianza en su capacidad para escribir código JavaScript de alta calidad que resista el paso del tiempo.
Puntos Cubiertos:
1. Introducción a los Patrones de JavaScript2. Patrones Fundamentales3. Patrones de Creación de Objetos4. Patrones de Comportamiento5. Patrones Arquitectónicos6. Ejercicios Prácticos y Estudios de Caso
Cómo Ayudará a los Desarrolladores:
- Obtener una comprensión profunda de los patrones de JavaScript y sus aplicaciones en escenarios del mundo real- Aprender las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables- Mejorar las habilidades de resolución de problemas y la legibilidad del código- Mejorar la colaboración y la comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento de la carrera y las oportunidades de avance en la industria del software
Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
React Day Berlin 2022React Day Berlin 2022
86 min
Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
Top Content
Workshop
Hussien Khayoon
Kahvi Patel
2 authors
Usar una biblioteca puede parecer fácil a primera vista, pero ¿cómo eliges la biblioteca correcta? ¿Cómo actualizas una existente? ¿Y cómo te abres camino a través de la documentación para encontrar lo que quieres?
En esta masterclass, discutiremos todos estos puntos finos mientras pasamos por un ejemplo general de construcción de un editor de código usando CodeMirror en React. Todo mientras compartimos algunas de las sutilezas que nuestro equipo aprendió sobre el uso de esta biblioteca y algunos problemas que encontramos.
Testing Web Applications Using Cypress
TestJS Summit - January, 2021TestJS Summit - January, 2021
173 min
Testing Web Applications Using Cypress
Top Content
Workshop
Gleb Bahmutov
Gleb Bahmutov
Esta masterclass te enseñará los conceptos básicos para escribir pruebas end-to-end útiles utilizando Cypress Test Runner.
Cubriremos la escritura de pruebas, cubriendo cada característica de la aplicación, estructurando pruebas, interceptando solicitudes de red y configurando los datos del backend.
Cualquiera que conozca el lenguaje de programación JavaScript y tenga NPM instalado podrá seguir adelante.
Desatando los Componentes del Servidor React: Una Inmersión Profunda en el Desarrollo Web de la Próxima Generación
React Day Berlin 2023React Day Berlin 2023
149 min
Desatando los Componentes del Servidor React: Una Inmersión Profunda en el Desarrollo Web de la Próxima Generación
Workshop
Maurice de Beijer
Maurice de Beijer
¡Prepárate para potenciar tus habilidades de desarrollo web con los Componentes del Servidor React! En esta inmersiva masterclass de 3 horas, desbloquearemos el potencial completo de esta tecnología revolucionaria y exploraremos cómo está transformando la forma en que los desarrolladores construyen aplicaciones web rápidas y eficientes.
Únete a nosotros mientras nos adentramos en el emocionante mundo de los Componentes del Servidor React, que combinan sin problemas el renderizado del lado del servidor con la interactividad del lado del cliente para un rendimiento y una experiencia de usuario inigualables. Obtendrás experiencia práctica a través de ejercicios prácticos, ejemplos del mundo real y orientación experta sobre cómo aprovechar el poder de los Componentes del Servidor en tus propios proyectos.
A lo largo de la masterclass, cubriremos temas esenciales, incluyendo:- Entender las diferencias entre los Componentes del Servidor y del Cliente- Implementar Componentes del Servidor para optimizar la obtención de datos y reducir el tamaño del paquete JavaScript- Integrar Componentes del Servidor y del Cliente para una experiencia de usuario fluida- Estrategias para pasar datos efectivamente entre componentes y gestionar el estado- Consejos y mejores prácticas para maximizar los beneficios de rendimiento de los Componentes del Servidor React
0 a Auth en una Hora Usando NodeJS SDK
Node Congress 2023Node Congress 2023
63 min
0 a Auth en una Hora Usando NodeJS SDK
WorkshopFree
Asaf Shen
Asaf Shen
La autenticación sin contraseña puede parecer compleja, pero es fácil de agregar a cualquier aplicación utilizando la herramienta adecuada.
Mejoraremos una aplicación JS de pila completa (backend de Node.JS + frontend de React) para autenticar usuarios con OAuth (inicio de sesión social) y contraseñas de un solo uso (correo electrónico), incluyendo:- Autenticación de usuario - Administrar interacciones de usuario, devolver JWT de sesión / actualización- Gestión y validación de sesiones - Almacenar la sesión para solicitudes de cliente posteriores, validar / actualizar sesiones
Al final del masterclass, también tocaremos otro enfoque para la autenticación de código utilizando Flujos Descope en el frontend (flujos de arrastrar y soltar), manteniendo solo la validación de sesión en el backend. Con esto, también mostraremos lo fácil que es habilitar la biometría y otros métodos de autenticación sin contraseña.
Tabla de contenidos- Una breve introducción a los conceptos básicos de autenticación- Codificación- Por qué importa la autenticación sin contraseña
Requisitos previos- IDE de tu elección- Node 18 o superior
Construye aplicaciones peer-to-peer con Pear Runtime
JSNation 2024JSNation 2024
152 min
Construye aplicaciones peer-to-peer con Pear Runtime
WorkshopFree
David Mark Clements
David Mark Clements
Aprende cómo construir rápidamente aplicaciones peer-to-peer con Pear Runtime. No se requieren servidores. Comprende los paradigmas peer-to-peer y construye aplicaciones a partir de bloques de construcción bien definidos. En este masterclass se cubrirá cómo crear aplicaciones de escritorio y terminales (con discusión para móviles) que funcionan completamente peer-to-peer desde cualquier lugar del mundo. Al final de este masterclass, deberías saber cómo construir un nuevo tipo de aplicación altamente escalable con costos infraestructurales reducidos (~0) junto con arquitecturas adecuadas y mejores prácticas para aplicaciones peer-to-peer. Del creador de Pear Runtime y la compañía que nos trae keet.io. Tabla de contenido:- Introducción a Pear- Preguntas y respuestas iniciales- Configuración- Creación de una aplicación de escritorio Pear- Compartir una aplicación Pear- Ejecutar una aplicación Pear- Creación de una aplicación terminal Pear- Lanzamiento de una aplicación Pear- Discusiones arquitecturales- Preguntas y respuestas finales