- La nouvelle norme Temporal API, qui remplace en profondeur les limites de l’objet Date en JavaScript, a atteint le stade 4 d’ECMAScript après 9 ans de développement
- Temporal fournit des types immuables, une prise en charge explicite des fuseaux horaires et des calendriers, ainsi qu’une précision à la nanoseconde, éliminant les ambiguïtés et les erreurs de l’ancien
Date
- Bloomberg, Igalia, Microsoft, Google, Mozilla et d’autres acteurs ont collaboré à la conception de la spécification et à son implémentation, avec la bibliothèque commune en Rust
temporal_rs pour permettre une coopération entre plusieurs moteurs
- Temporal prend en charge avec précision les calculs temporels et les calendriers internationaux grâce à des types détaillés comme ZonedDateTime, Instant, PlainDate/Time, Duration
- Cette norme, qui résout des problèmes vieux de 30 ans, est considérée comme un exemple réussi de collaboration et d’innovation ouverte dans l’écosystème JavaScript
Les problèmes de gestion du temps en JavaScript et l’arrivée de Temporal
- L’ancien objet Date, simple portage du
Date de Java en 1995, est depuis des décennies une source de bugs à cause de sa mutabilité, de calculs de mois incohérents et d’un parsing ambigu
- Exemple : erreurs de calcul en fin de mois avec
setMonth, résultats différents selon les navigateurs lors du parsing de chaînes proches du format ISO
- À partir des années 2010, à mesure que les applications web se sont complexifiées, les limites de
Date se sont aggravées
- Les développeurs ont compensé avec des bibliothèques externes comme Moment.js, au prix d’une augmentation de la taille des bundles et d’une charge de maintenance supplémentaire
- En 2017, Maggie Johnson-Pint a soumis à TC39 la proposition Temporal, lançant le processus de standardisation
La collaboration entre TC39 et l’industrie
- Temporal a commencé en stage 1 en 2018 et a atteint le stage 4 (standardisation) au terme d’un parcours de 9 ans
- Bloomberg a participé activement pour résoudre les problèmes de fuseau horaire et de précision dans des environnements JavaScript à grande échelle
- Exigences : fuseaux horaires personnalisés, exactitude historique basée sur l’IANA, précision à la nanoseconde
- La spécification et l’implémentation ont été menées en collaboration avec Igalia, Microsoft, Google, Mozilla et d’autres
- Plusieurs ingénieurs ont participé comme champions, dont Philipp Dunkel, Ujjwal Sharma, Philip Chimento, Shane Carr, Justin Grant
Les principaux types et fonctionnalités de Temporal
- Temporal.ZonedDateTime : représentation immuable d’un instant avec fuseau horaire, calendrier et ajustement explicite de l’heure d’été
- Exemple : lors du passage à l’heure d’été à Londres, si
01:30 n’existe pas, la valeur est automatiquement ajustée à 02:30
- Temporal.Instant : représentation d’un instant absolu sans fuseau horaire ni calendrier, avec précision à la nanoseconde
- Le même instant peut être converti vers plusieurs fuseaux horaires
- PlainDate / PlainTime / PlainDateTime / PlainYearMonth / PlainMonthDay : types « horloge murale » sans fuseau horaire
- Adaptés à l’affichage simple de dates et heures ou à leurs calculs
- Temporal.Duration : représentation d’un intervalle de temps, avec conversion possible entre différentes unités (
total({ unit: "second" }))
- Prise en charge des calendriers : exécution correcte d’opérations sur des calendriers non grégoriens, comme le calendrier hébraïque
Implémentation et processus de standardisation
- Temporal constitue l’ajout de spécification le plus important de l’histoire d’ECMAScript, avec environ 4 500 cas de test
- Une implémentation commune en Rust,
temporal_rs, a été développée et utilisée conjointement par plusieurs moteurs comme V8 et Boa
- Avantages : réduction de la barrière à l’entrée, maintenance à long terme facilitée, amélioration de la qualité du code
- Entre 2024 et 2025,
temporal_rs a atteint 100 % de réussite aux tests et est considéré comme un exemple réussi de collaboration multi-moteurs
État du support et défis à venir
- Temporal est déjà pris en charge par Firefox 139, Chrome/Edge 144 et TypeScript 6.0 Beta
- Safari en est au stade de préversion technique, et Node.js 26 est prévu
- Le principal défi à venir est l’intégration avec les API Web
- Exemple : prise en charge des types
Temporal dans les éléments de formulaire comme <input type="date">
- Étude de son potentiel pour remplacer
DOMHighResTimeStamp (avec l’exemple d’utilisation de Temporal.Now.instant())
Les résultats de la collaboration et de l’innovation ouverte
- Temporal est une norme finalisée grâce à 9 années de collaboration entre plusieurs organisations, avec la participation de
- Microsoft, Google, Mozilla, Bloomberg, Igalia, Boa et d’autres acteurs
temporal_rs est considéré comme un exemple réussi de modèle d’infrastructure partagée, qui a
- réduit les coûts d’implémentation redondants, amélioré la cohérence et accéléré l’innovation
- Au-delà d’une simple amélioration d’API, Temporal est vu comme la preuve d’un effort collectif de la communauté JavaScript pour résorber une dette technique de long terme
- Après 30 ans, JavaScript dispose enfin d’une API moderne pour les dates et les heures
Aucun commentaire pour le moment.