-
Début du déploiement de JavaScript Temporal
- L’implémentation du nouvel objet JavaScript Temporal commence à être incluse dans les versions expérimentales des navigateurs. C’est une excellente nouvelle pour les développeurs web, car la gestion des dates et des heures en JavaScript va devenir beaucoup plus simple et moderne.
- Les applications qui dépendent de la planification, de l’internationalisation et de données sensibles au temps pourront utiliser des fonctionnalités intégrées pour manipuler efficacement et de façon fiable des dates, heures, durées et calendriers cohérents.
- Un support stable sur l’ensemble des navigateurs est encore loin, et des changements peuvent survenir à mesure que l’implémentation évolue, mais il est déjà possible d’examiner Temporal, de comprendre pourquoi il existe et quels problèmes il résout.
- Plus de 270 pages de documentation Temporal ont été ajoutées cette semaine sur MDN, avec des explications détaillées et des exemples.
-
Qu’est-ce que JavaScript Temporal ?
- Pour comprendre Temporal, on peut se pencher sur l’objet
Date de JavaScript. Lorsque JavaScript a été créé en 1995, l’objet Date a été copié depuis l’implémentation initiale et défaillante de java.util.Date en Java.
- Java a remplacé cette implémentation dès 1997, mais JavaScript est resté coincé avec la même API pendant près de 30 ans.
- Le principal problème de l’objet
Date en JavaScript est qu’il ne prend en charge que l’heure locale de l’utilisateur et l’UTC, sans support des fuseaux horaires. En plus, le comportement de parsing est très peu fiable, et Date lui-même est mutable, ce qui peut provoquer des bugs difficiles à suivre.
- Tous ces problèmes rendent la gestion des dates et des heures en JavaScript complexe et sujette aux erreurs. La plupart des développeurs s’appuient sur des bibliothèques comme Moment.js et date-fns pour mieux traiter ces sujets dans leurs applications.
- Temporal est conçu pour remplacer complètement l’objet
Date, afin de rendre la gestion des dates et des heures fiable et prévisible. Temporal prend en charge les fuseaux horaires et la représentation des calendriers, et ajoute de nombreuses méthodes intégrées pour les conversions, les comparaisons, les calculs, le formatage, etc.
-
Concepts clés
- Les concepts fondamentaux de Temporal sont l’instant (un point unique dans l’histoire), l’heure d’horloge murale (heure locale) et la durée. L’API est structurée ainsi pour traiter ces concepts :
- Durée :
Temporal.Duration, différence entre deux points dans le temps
- Point dans le temps :
- Point unique dans le temps :
- Sous forme de timestamp :
Temporal.Instant
- Date-heure avec fuseau horaire :
Temporal.ZonedDateTime
- Date/heure indépendante du fuseau horaire ("Plain") :
- Date et heure complètes :
Temporal.PlainDateTime
- Date seule :
Temporal.PlainDate
- Année et mois :
Temporal.PlainYearMonth
- Mois et jour :
Temporal.PlainMonthDay
- Heure seule :
Temporal.PlainTime
- Présent : utiliser
Temporal.now pour obtenir l’heure actuelle sous la forme de différentes instances de classes ou dans un format spécifique
-
Exemples de Temporal
- L’un des usages les plus élémentaires de Temporal consiste à obtenir la date et l’heure actuelles sous forme de chaîne ISO. De nombreuses méthodes permettent désormais de fournir un fuseau horaire, ce qui évite d’avoir à effectuer soi-même des calculs complexes.
- Le travail avec différents calendriers est également simplifié, ce qui permet de créer des dates dans des systèmes calendaires autres que le calendrier grégorien, par exemple hébreu, chinois ou islamique.
- Travailler avec des timestamps Unix est un cas d’usage très courant, car de nombreux systèmes (API, bases de données) utilisent ce format pour représenter le temps.
- La méthode
compare() permet de trier des durées de façon élégante et efficace.
-
Essayer Temporal et support des navigateurs
- Le support commence lentement à apparaître dans les versions expérimentales des navigateurs, Firefox disposant actuellement de l’implémentation la plus aboutie.
- Dans Firefox, Temporal est intégré à la version Nightly derrière le paramètre
javascript.options.experimental.temporal.
- Avec l’arrivée de ces implémentations expérimentales, c’est le bon moment pour essayer Temporal et se familiariser avec une approche moderne de la gestion des dates et des heures en JavaScript.
-
Remerciements
- Merci à Eric Meyer pour son travail sur le sujet. Cela fait maintenant environ quatre ans qu’Eric documente les données de compatibilité des navigateurs et structure la documentation dans un fork de mdn/content.
- Joshua Chen a pris le relais d’Eric et préparé les pull requests pour la documentation MDN.
- Merci à André Bargull pour son travail sur l’implémentation de Temporal dans Firefox.
1 commentaires
Avis sur Hacker News
Temporal est utile pour résoudre les problèmes de l’API
Date()existante. Il propose une API pratique inspirée de bibliothèques temporelles de haute qualité comme chrono en Rust et Joda Time en JavaIl est possible de convertir un fuseau horaire avec
Temporal.ZonedDateTime.prototype.withTimeZone()Temporal.Durationne fournit pas de fonctionformatpersonnaliséeLa proposition Temporal est bonne, mais il est regrettable qu’elle utilise l’égalité par référence pour les comparaisons
Mapou de les regrouper dans unSetDe nombreuses fonctionnalités sont en cours de développement au TC39, et il serait souhaitable que Temporal sorte rapidement
Des interrogations subsistent sur la manière dont Temporal mettra à jour les données de fuseaux horaires
Il est proposé d’ajouter un événement lors des changements de fuseau horaire
Le nom Temporal a été choisi pour éviter un conflit avec un objet de temps générique, mais au départ il peut faire penser à un contrôle du ramasse-miettes
La classe Carbon de PHP, qui hérite de DateTime, illustre les problèmes liés à la manipulation de timestamps mutables
Il existe divers articles et discussions autour de JavaScript Temporal