Temporal: El Curioso Incidente de la Noche Equivocada

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
Rate this content

Esta es la historia de cómo casi pasé una noche en la calle, ¡por culpa del objeto Date de JavaScript! Nos sumergiremos y trataremos de entender por qué sucedió eso y cómo prevenirlo. Afortunadamente, próximamente en un navegador cerca de ti está Temporal, la API integrada de JavaScript que hace que este tipo de errores sean cosa del pasado.

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

 Philip Chimento
Philip Chimento
25 min
12 Jun, 2025

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Participación del ponente en la propuesta de Temporal y reuniones de TC39 para la estandarización de JavaScript. Desafíos de conversión de fechas enfrentados en el desarrollo. Abordar las discrepancias de zona horaria con Temporal para prevenir errores. Exploración de los tipos de Temporal y la filosofía de diseño. Uso de la serialización de zona horaria de Java en JavaScript Temporal. Desafíos en la implementación de la propuesta de Temporal y su potencial transformador en ECMAScript.

1. Speaker's Introduction and Work Background

Short description:

Introducción del ponente y antecedentes laborales, participación en la propuesta Temporal y reuniones de TC39 para la estandarización de características en JavaScript.

Muy bien. Gracias a todos. Sí. Quiero mencionar que casi pasé la noche en la calle. No realmente. Pero escucharás sobre eso. Gracias por la introducción, Phil. Fue muy agradable. Estoy muy feliz de estar aquí. Estoy visitando desde Vancouver, Canadá. Y, sí, mi trabajo es como desarrollador de motores de JavaScript en Igalio.

Voy a hablar sobre Temporal. Como saben, Temporal es una propuesta para agregar manejo moderno de datos y tiempo a JavaScript. Así que no como un paquete o una biblioteca, sino integrado en JavaScript en todo el lenguaje. Soy parte de un grupo que trabaja en esta propuesta. Mi participación es parte de una asociación entre Igalio y Bloomberg. Hablaremos más sobre eso más tarde.

Aquí es donde puedes encontrarme ahora mismo, supongo. Entonces, ¿a dónde vas si quieres que algo se integre en JavaScript? Participas en su estandarización en TC39. Eso es lo que estamos haciendo con Temporal. Nos reunimos cada dos meses. Algunas de las reuniones son completamente remotas. Algunas de ellas son híbridas, en persona y remotas. Así que quiero contarte una historia específicamente sobre una reunión de TC39 hace un par de años. Nos estábamos reuniendo en Bergen, Noruega. Tuve la suerte de poder viajar allí en persona. Algo gracioso. Cuando reservé mi viaje allí. Así que prometo que esto va a algún lado. Por supuesto, necesitaba un lugar para quedarme.

2. Speaker's Booking Dilemma and Temporal Experience

Short description:

Problema de reserva del ponente en un hotel en Bergen debido a desafíos de conversión de fechas y experiencia con Temporal en el desarrollo de JavaScript.

Así que estoy en casa en Vancouver. Quiero reservar un lugar. Voy al sitio web de uno de los establecimientos hoteleros de Bergen para reservar una estancia. Pongo mis fechas. Quiero registrarme el 10 de julio, salir el 14 de julio. Y luego hice clic en aceptar. Y llegué a la página de confirmación. Y vi esto.

Así que eso no fue lo que pedí. Sí. Quería registrarme el 9 de julio. No quiero registrarme el 9 de julio. Quiero registrarme el 10 de julio. Y quiero quedarme hasta el 14. Así que este gato quiere saber qué pasó y yo también. No podemos saber con certeza porque, por supuesto, no fui a hacer una depuración profunda en el sitio web de este hotel.

Pero he estado trabajando en Temporal durante cinco años. He visto muchos de los errores que puedes cometer con el antiguo objeto de fecha de JavaScript. Estaría dispuesto a apostar una pequeña cantidad de dinero a que sé lo que pasó. Así que vamos a pretender que estamos en el front-end de este sitio web. Lo simularemos iniciando un REPL en la zona horaria de mi ciudad natal, Vancouver. Elijo mi fecha de check-in del selector de fechas. Estamos simulando eso aquí.

3. Handling Date Conversions in Front and Back End

Short description:

El front end convierte la fecha a milisegundos, procesamiento en el back end y manejo de desafíos de conversión de fechas para reservas.

Luego, el front end lo convierte en un timestamp en milisegundos para enviarlo al back end. Probablemente pensaron, ah, número de milisegundos. Fácil de serializar en JSON. Vamos a enviarlo. Nota el menos uno. Sí, los meses comienzan en cero en el antiguo objeto de fecha de JavaScript. Todo el mundo odia eso. Es una de las cosas que arreglamos en Temporal.

Bien. Lo enviamos. Muy bien. Así que ahora estamos en el back end. Lo ponemos en otro REPL y lo ponemos en la zona horaria de Noruega. Recibimos ese número de milisegundos. Lo convertimos en un objeto de fecha. Obtenemos el año, el mes, el día. Bien. Hasta ahora se ve bien. Y luego lo reservamos. Por supuesto, los verdaderos back ends de hoteles no tienen un error de tiempo de check-in, tiempo de uso como este, pero estoy simplificando.

Serializamos esa fecha en un timestamp y la enviamos de vuelta al front end. Y, por supuesto, somos muy conscientes de nuestras entradas. Así que nos aseguramos de que no haya tiempo del día extra. Establecemos las horas, minutos, segundos, etcétera a cero. Tal vez puedas empezar a ver hacia dónde va esto. Estamos en el front end de nuevo, de vuelta en Vancouver. Mi zona horaria, la costa oeste de Canadá, UTC menos ocho, recibe el número de milisegundos.

4. Addressing Time Zone Discrepancies with Temporal

Short description:

Creación de objetos de fecha y abordaje de discrepancias de zona horaria con Temporal para prevenir errores.

Crea una fecha a partir de ello. Y día incorrecto. El problema con la antigua fecha, es que asume que te refieres a la zona horaria actual. A menos que específicamente digas UTC. Así que este timestamp de medianoche en Noruega es las tres de la tarde del día anterior en Vancouver. Así que eso es lo que mi navegador me mostró en la página de confirmación. Entonces la gran pregunta, ¿tenía un lugar para dormir el 13 de julio? Envié un correo electrónico al hotel, y confirmé, sí, en realidad no tengo que pasar mi última noche en Noruega durmiendo en el salón del aeropuerto o en la calle o lo que sea. Tenían las fechas correctas en su extremo. Así que creo que su sistema de reservas lo hizo bien, que es lo que sucedería en este pequeño ida y vuelta que te mostré. Y fue solo la página de confirmación en mi navegador la que lo mostró mal. Pero si hubiera vivido al este de Noruega en lugar de al oeste, tal vez hubiera sido al revés. Habrían reservado la fecha incorrecta pero me habrían mostrado la fecha correcta en la página de confirmación. Así que podría haber sido peor.

De todos modos, ¿por qué estoy hablando de la antigua fecha si estoy construyendo Temporal? Así que estamos construyendo Temporal. Ya está disponible en algunos navegadores, más sobre eso más adelante. Está llegando a otros pronto. Es una biblioteca incorporada. Uno de nuestros objetivos de diseño era hacer difícil escribir errores como este. Deberías tener un tipo que haga lo que quieres poder hacer con ese tipo pero no más. Como, si tienes una fecha y no te importa qué hora es, no deberías encontrarte con errores donde accidentalmente es las 3 de la tarde del día anterior. Así que tuvimos que diseñar cosas alrededor del entendimiento de que una fecha de calendario sin hora es conceptualmente un objeto diferente que un timestamp en milisegundos. Así que si estuviera escribiendo el sitio web de este hotel con Temporal, usaría un objeto de fecha simple. Obtienes estos datos de tu selector de fecha, creas un objeto de fecha simple, puedes serializar para enviarlo al backend con dos JSON o tal vez dos string dependiendo de tus necesidades de serialización lo obtienes de vuelta del backend, lo deserializas, y obtienes otro objeto que es igual al primer objeto. Y no hay tonterías sobre esto. Es cierto en cualquier parte del mundo. ¿Qué más es bueno sobre esto? Dije que está incorporado. Así que muchos de ustedes probablemente incluyen en sus varios paquetes o han incluido en algún momento Moment o Luxon o alguna biblioteca como esa para lograr las mismas cosas que hace Temporal. Y puedes hacer eso, pero dependiendo de si incluyes los datos de localización, podría ser en cualquier lugar desde una docena de kilobytes extra hasta cientos de kilobytes extra. Por eso queremos esto incorporado en el lenguaje. Es inmutable y hay un fuerte soporte para la internacionalización.

5. Exploring Temporal Types and Design Philosophy

Short description:

Exploración de tipos de Temporal: Instant para tiempo exacto, Plain Types para representación de fecha y hora independientemente de zonas horarias.

No voy a centrarme en esos ahora mismo porque tenemos poco tiempo. Esas son otras cosas buenas al respecto. Te daré un pequeño recorrido por los diferentes tipos que tenemos disponibles en Temporal. Así que hablé un poco sobre nuestra filosofía de diseño, que es solo poder hacer las cosas que necesitas poder hacer con ese tipo. Así que deberías poder hacer más con Temporal de lo que podías con la antigua fecha, pero con cada objeto individual que tienes como parte de Temporal, deberías poder hacer menos. No deberías poder hacer cosas extrañas como convertir una fecha sin hora en un número de milisegundos. Y esperamos que eso haga que algunos de estos errores comunes sean difíciles de cometer por accidente.

Si realmente necesitas hacerlo, puedes averiguar cómo hacerlo, pero no está justo ahí al alcance de tu mano. Así que el primer tipo que deberías conocer es Instant. Es un momento exacto en el tiempo. A veces lo llamamos un tiempo exacto. Es un punto instantáneo en la línea de tiempo, resolución de nanosegundos. No hay calendario, no hay meses, semanas, años o días. No hay zona horaria, no hay ajustes de horario de verano o invierno, solo un número mayormente creciente.

Luego tenemos una familia de tipos llamados Plain Types. Así que estos representan una fecha en tu calendario de pared y una hora en el reloj de tu pared. Así que a veces los llamamos wall time, plain time, wall time. Así que representan la fecha y hora donde estás independientemente de la zona horaria. Así que no hay ajustes de horario de verano e invierno, pero a diferencia de Instant, no son momentos exactos en el tiempo. Así que un wall time, como puedes decir el 18 de noviembre de 2024 a las dos y media, eso podría ocurrir en varios instantes diferentes, dependiendo de dónde estés en el mundo. Y luego tenemos toda una familia de Plain Types con progresivamente menos información. Y eso es para que puedas representar correctamente la información que tienes. Así que tenemos Plain Date, ya lo viste en mi ejemplo. Este es un caso de uso muy común utilizado para no reservar las fechas incorrectas en hoteles. Tienes Plain Time, que es una hora de reloj sin un día específico.

6. Temporal Types and Code Examples

Short description:

Explicación de tipos de Temporal: Plain Year Months, Plain Months Day, Zone Date Time, y tipo de duración para funcionalidad y ejemplos de código.

Así que puedes decir, ya sabes, Philips Q&A para temporal comienza a las 5:25 p.m. o 17:25 si usas un reloj de 24 horas. Tenemos Plain Year Months, que representa algo que, es un mes sin un día específico y podrías referirte a un evento que ocurre ocasionalmente como la reunión de la junta de junio de 2025. También lo tenemos específicamente porque corresponde a un tipo de entrada HTML, months. Eso es principalmente para lo que la gente lo usa.

Oh sí, Plain Months Day, es una fecha de calendario sin un año. Puedes decir que mi cumpleaños es el 15 de diciembre, que lo es, pero, ya sabes, no te diré cuántos años tengo. Así que puedes simplemente celebrar mi cumpleaños el 15 de diciembre. No necesitas saber el año en que nací. Tenemos un tipo de tiempo exacto más, Zone Date Time. Esto es como Instant, representa un momento exacto en el tiempo, pero tiene una ubicación y una zona horaria y tiene un calendario. Así que hay semanas, meses, años. Automáticamente tiene en cuenta los ajustes de horario de verano e invierno. Así que tiene, básicamente, es un tiempo exacto que tiene toda la información necesaria para también darte un wall time.

Luego hay un tipo de duración. No entraré en eso, pero, ya sabes, se usa con los otros tipos, métodos aritméticos como sumar y restar. Así que todos ustedes están aquí, probablemente la mayoría de ustedes son desarrolladores en práctica, quieren ver el código. Quiero escribir algo de código. No sé si tuve suficiente tiempo para hacerlo en vivo, así que lo preparé en las diapositivas, pero, ya sabes, dado que está disponible en Firefox, tal vez si no se me acaba el tiempo, lo haremos allí. Tengo un pequeño ejemplo trabajado. Lo obtuve de un sitio web de conferencias. No es el sitio web de JS Nation porque en realidad el sitio web de JS Nation es realmente bueno con las zonas horarias y te muestra, ya sabes, la zona horaria local en Ámsterdam. Y también si estás en la pista remota, te muestra tu zona horaria local en tu navegador. Así que dos pulgares arriba para quien hizo ese sitio web. Pero ya sabes, esto era solo una imagen estática en el sitio web de esta conferencia. Así que quiero responder a la pregunta, ya sabes, está bien, hay todas estas sesiones donde quiero asistir. ¿A cuáles puedo asistir, ya sabes? ¿Cuáles no son mientras estoy dormido? Ya sabes, vivo en uno de estos. Vivo en las Américas. ¿Sé cuándo es la hora estándar del este de Australia, las 10 en punto? No tengo idea. Ya sabes, podría averiguarlo.

7. Session Timing and Temporal Conversion

Short description:

Planificación y ejecución de horarios de sesiones basados en consideraciones temporales y de zonas horarias para la asistencia a conferencias.

La mayoría de las personas, si eres como yo, probablemente lo hayas introducido en un motor de búsqueda y esperas que adivinen correctamente lo que quieres, pero, ya sabes, el enfoque fuertemente tipado de temporal es perfecto para resolver esto. Muy bien. Así que esto es lo que sabemos. Sabemos las dos fechas del calendario en las que ocurren las sesiones. Sabemos las horas de inicio de las sesiones. Sabemos sus zonas horarias. Sabemos mi zona horaria. Y sabemos las horas en mi hora local a las que estoy dispuesto a estar en mi computadora. Obviamente no me voy a levantar a las, ya sabes, 3 de la mañana para ir a una conferencia.

Y aquí hay un poco de pseudocódigo para cada fecha de sesión para cada sesión. Calcula la hora exacta de inicio y fin de la sesión en esa fecha. Transfórmalo a mi hora local en mi zona horaria, y si está dentro de las horas en las que quiero estar en línea, entonces lo imprimiré y lo agregaré a mi calendario. Así que creo que tal vez pueda, como, salir de pantalla completa y cambiar a la consola del navegador. ¿Puedes ver esto? Creo que es realmente pequeño. Muy bien. Aquí vamos. Sí. Como dije, no estaba seguro de cuánto tiempo tengo, así que lo ingresé de antemano.

Pero, ya sabes, tenemos nuestras fechas de la conferencia. Creamos fechas planas temporales. Tenemos nuestras sesiones. Podrías preguntar, como, ¿cómo demonios paso de una abreviatura como AEST a este identificador Australia slash Brisbane? Sabes, AEST es ambiguo. Podría significar cualquier número de zonas horarias. Estos son inequívocos, y generalmente puedes obtenerlos de Wikipedia. Pero sí. Oh. ¿Qué hice? Oh, no. Muy bien. Me ceñiré al código que puse en la presentación para que eso no vuelva a suceder. Genial.

8. Session Availability and Browser Integration

Short description:

Creación de identificadores de sesión, manejo de duraciones y zonas horarias para la asistencia a conferencias. Utilización de APIs para la recuperación de zonas horarias y métodos de comparación para la disponibilidad de sesiones. Integración con navegadores y próxima disponibilidad en diferentes plataformas y motores.

Lo siento, todos. Está bien. Muy bien. Así que esto es lo que viste en la consola de mi navegador, básicamente. Sabes, creamos esos identificadores. Creamos una duración para la longitud de la sesión, y obtenemos mi zona horaria. Hay una API para obtenerla del navegador. Sabes, aquí hay una pequeña función que escribí. Sabes, me levantaré y estaré en mi computadora tal vez a las 8 en punto, y quiero apagar mi computadora a las 11 en punto de la noche. Y así escribí una pequeña función aquí para decir, oh, puedo estar en línea entre esos tiempos, y usamos un método de comparación.

No entraré en todos los detalles de la API. Te mostraré cómo funciona. Ponlo todo junto. Tuve dos bucles de ese pseudocódigo. Puedes ver los dos bucles aquí con foreach. Calcula el inicio de la sesión en la zona horaria de la conferencia, cálculalo en mi zona horaria, verifica si puedo estar en línea al inicio de mi sesión y al final de mi sesión. Y si puedo, entonces imprímelo. Y obtenemos algo interesante. Pon la conferencia en tu calendario en estos horarios.

Me gustaría haber podido mostrártelo en Firefox, pero tales son las vicisitudes de las demostraciones en vivo. Gracias. Muy bien. Así que cuando todos, por supuesto, quieren saber cuándo puedo usarlo. Sabes, ya puedes usarlo en Firefox. Está en caniuse.com y otros sitios que te muestran cuándo las APIs están disponibles. Así que Firefox lo lanzó hace como dos semanas. Así que eso es realmente genial. Safari tiene algo de esto disponible detrás de la bandera en la vista previa tecnológica. Si quieres que se lance en Chrome y V8 y luego de ahí en Node y cosas así, hay una oportunidad para que te involucres porque Chrome está haciendo su implementación junto con el motor Boa JS. Y tienen un crate de Rust llamado Temporal RS que está aceptando contribuciones.

QnA

Temporal Implementation and Collaboration

Short description:

Oportunidades para desarrolladores de Rust para contribuir a la implementación de Temporal. Colaboración con Igalia para la mejora de estándares web. Disponibilidad de polyfills de Temporal para uso inmediato en GitHub y NPM.

Así que si te gusta escribir código en Rust y quieres ayudar a que dos motores de JavaScript alcancen una implementación completa de Temporal, es una gran oportunidad de baja fricción para contribuir. Solo ve aquí. GitHub slash Boa dash dev slash Temporal. Si quieres saber más, está completamente documentado en MDN, el sitio web que todos conocemos y amamos. Y ayudé a escribir un libro de cocina de Temporal con recetas comunes que podrías querer hacer usando Temporal para todo tipo de tareas comunes. Y luego dije al principio que iba a volver sobre lo que significa una asociación con Igalia. Así que hacemos muchas cosas en estándares, como intentar llevar cosas buenas a JavaScript y la plataforma web. Amamos los estándares abiertos y la web. Gran parte de este trabajo lo hacemos a través de colaboraciones con otras empresas. Así que si estás interesado en colaborar con nosotros para mejorar el estado de la plataforma web, ven a hablar conmigo o con uno de mis colegas. Así que si haces este tipo de cosas, somos uno de los mantenedores del navegador Servo, si has oído hablar de eso.

Así que sí, ven y habla con nosotros. Y veo que a pesar del contratiempo técnico, estoy aquí listo para preguntas con un minuto de sobra. Muchas gracias, Philip. Genial. Así que tenemos algunas preguntas. La primera, creo, es realmente útil. Para las personas que quieren usarlo ahora mismo, ¿conoces un polyfill de Temporal que usarías ahora mismo? Sí, hay dos que creo que están listos para usar. Uno en el que estuve involucrado, así que mencionaré ese al final. El otro es de Full Calendar. Así que creo que se llama Full Calendar slash Temporal dash polyfill en GitHub. He hablado con una de las personas que lo mantiene. Y de hecho, nos ayudó a encontrar algunos errores en la propuesta. Así que eso es realmente genial. El otro en el que he estado involucrado y algunas de las otras personas involucradas en la propuesta. Y lo tenemos en js dash Temporal slash polyfill, creo. ¿En GitHub? Sí, ambos están en GitHub y en NPM. Genial. Genial. Increíble.

Java Influence on JavaScript Temporal

Short description:

Influencia de la API Temporal de Java en JavaScript Temporal. La serialización de identificadores de zona horaria de Java adoptada en JavaScript Temporal. Conexión histórica entre las funciones de fecha de JavaScript y Java.

Y supongo que probablemente sean ESNs. Puedes importarlos solo si los necesitas. Si estás usando Firefox, no lo necesitas. Ese tipo de... Correcto. Sí. Correcto. Bien.

Pregunta. ¿Cuánto influyó la API Temporal de Java en esta de JavaScript? Yo diría que no directamente, como en que no miramos los métodos y dijimos, oh, necesitamos tener ese método. Porque así es como obtuvimos el objeto de datos original de JavaScript.

Pero esta es realmente una pregunta interesante. Porque Java en realidad fue pionera en una forma de serializar identificadores de zona horaria en cadenas que no era estándar. Lo añadieron de alguna manera a este formato de cadena que todo el mundo entiende. Y de alguna manera se difundió y la gente comenzó a usarlo.

JavaScript Temporal Libraries Evolution

Short description:

Uso de la serialización de zonas horarias de Java en JavaScript Temporal. Evolución desde la función de fecha original de Java a un formato estandarizado. Discusión sobre la relevancia de las bibliotecas Luxon, Date.js y Temporal. Potencial para construir funcionalidades de nicho sobre Temporal.

Y queríamos usarlo en Temporal también. Porque es realmente útil para serializar la zona horaria en la que está tu evento. Y así, porque ellos lo pionearon, pudimos ir al IETF y estandarizar ese formato de cadena. Y eso fue todo un viaje. Podría dar una charla completa sobre eso y no lo haré. ¿Es ese el formato Australia barra Brisbane? No exactamente. Sí, esos ya existían por separado. Pero lo que hizo Java fue como tomar eso y ponerlo entre corchetes después de tu fecha y hora. Y así lo hicimos también. Y ahora ha sido estandarizado. Genial. Genial. Creo que es gracioso saber que, sí, la historia de las fechas de JavaScript se basaron en la función de fecha original de Java, ¿verdad? Y luego, hace 30 años, ¿verdad? Y luego Java dijo, oh, no, eso fue un error y lo cambió como un año después. Y 30 años después, finalmente estamos alcanzando. Sí, estamos alcanzando.

OK, entonces una pregunta sobre las bibliotecas existentes para fechas y cosas. ¿Sientes que Luxon, Date.js tienen un lugar ahora o están obsoletas? ¿Qué está pasando ahí? ¿El temporal elimina la necesidad de todas estas? Quiero decir, no diría que necesitas eliminarlas de tu código inmediatamente. Haciendo el trabajo, sí. Los mantenedores de Moment han dicho, momento, lo consideramos básicamente terminado. Y si quieres más, usa temporal. Creo que definitivamente también hay espacio para que las bibliotecas tomen tareas que tal vez eran demasiado de nicho para ser estandarizadas en el lenguaje pero que aún podrían ser relativamente comunes y construir esas sobre temporal. Y espero que probablemente haya algunas cosas en cosas como Date.fns que caen en esa categoría. Sí, eso tiene sentido.

Supongo que no solo proporcionan las correcciones para el formato de fecha existente, sino que también dan una forma más agradable de usarlo. Y si te gustó esa interfaz, probablemente podrías construirla sobre temporal mucho más fácilmente. O con menos código, probablemente. En realidad, espero que alguien de la comunidad de desarrolladores de JavaScript eche un vistazo a Date.fns y escriba un temporal.fns para ver qué falta y ver qué quiere usar la gente. Si estás ahí y quieres aprender cómo funciona temporal, solo reescribe Date.fns para temporal. Hazlo. Genial, hay una pregunta sobre errores con el análisis de cadenas.

Temporal Object Handling and Proposal Challenges

Short description:

Reglas de análisis de cadenas en Temporal, manejo de objetos inválidos y control sobre la aceptación de datos. Desafíos en la implementación de la propuesta Temporal y su impacto en JavaScript. Amplias discusiones sobre las necesidades de los usuarios y el potencial transformador de Temporal en ECMAScript.

¿Qué pasa si hay objetos explícitos o inválidos que intentas pasar a temporal? Ah, bueno, el análisis de cadenas es todo un... Como si la cadena es válida o no lo es. Y el formato de la cadena tiene reglas muy claras sobre lo que es válido. Así que, por ejemplo, el día 32 de un mes no está permitido. Lanzamos una excepción en ese caso. Puedes crear objetos temporales a partir de bolsas de propiedades. Y para esos, te damos un poco más de control sobre lo que se acepta. Así que puedes pedir que se lance una excepción en caso de datos inválidos, o puedes pedir que se ajuste al valor correcto. Genial. Genial.

Así que hay algunos elementos adicionales para ayudar en el caso de cosas inválidas. Genial. Y esta es una gran pregunta, y de alguna manera habla mucho de lo que vemos al introducir cosas nuevas en JavaScript, que es ¿cuáles son los aspectos más difíciles de implementar la propuesta temporal? Y solo añadiré a eso. Parece que está tomando bastante tiempo. Y obviamente, es un código complicado de escribir. Pero, ¿fue parte de eso el proceso de completar la propuesta también? Sí, diría que la mayor parte es completar la propuesta. Todo el trabajo no es código. En cuanto a escribir el código, una vez que sabes lo que tienes que escribir, es un código bastante sencillo. No estamos haciendo ninguna brujería aquí.

La parte difícil es averiguar qué es lo que la gente realmente quiere lograr con sus fechas y tiempos. Y sí, tenemos discusiones, hablando con los usuarios, hablando entre las personas que defienden la propuesta. Eso toma mucho tiempo. Y debido a que hay tantas tareas que la gente quiere lograr con fechas y tiempos, es la propuesta más grande que se ha intentado fusionar en ECMAScript. Va a cambiar nuestras vidas. Va a cambiar nuestras vidas para mejor cuando llegue. Y es tan genial. Así que hubo mucho que discutir. Sí. Sí. Genial.

Advantages of Temporal Immutability

Short description:

Ventajas de la inmutabilidad de Temporal para evitar modificaciones no intencionadas por funciones de librerías.

Voy a ir con una última pregunta, porque creo que estamos justo al límite aquí. Y solo... Sí, {{^}}voy a usar esta. ¿Cuál es la ventaja de que temporal sea inmutable? Eso no es lo que tenemos con date ahora mismo, ¿verdad? Puedes cambiar esos objetos. Entonces, ¿qué nos da la inmutabilidad en temporal? La inmutabilidad básicamente te da la certeza de que alguna función de librería no modificará tu objeto de fecha sin que te des cuenta. Porque tal vez una función de librería dirá, oh, esto devuelve el objeto, pero también muta el objeto original. Y no te das cuenta, y piensas que todavía tienes tu objeto antiguo en algún lugar. Y luego alguien está durmiendo en las calles. Sí. Y luego te despiertas de nuevo. Genial.

Bueno, muchas gracias, Philip. Démosle un aplauso más a Philip. Excelente charla sobre eso. Gracias. Gracias. Muchas gracias.

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
Búsqueda de texto completo basada en JavaScript con Orama en todas partes
Node Congress 2023Node Congress 2023
49 min
Búsqueda de texto completo basada en JavaScript con Orama en todas partes
Workshop
Michele Riva
Michele Riva
En este masterclass, veremos cómo adoptar Orama, un potente motor de búsqueda de texto completo escrito completamente en JavaScript, para hacer que la búsqueda esté disponible donde sea que se ejecute JavaScript. Aprenderemos cuándo, cómo y por qué sería una gran idea implementarlo en una función sin servidor, y cuándo sería mejor mantenerlo directamente en el navegador. Olvídate de las APIs, configuraciones complejas, etc.: Orama facilitará la integración de la búsqueda en proyectos de cualquier escala.