Moment.js est mort, quelle librairie utiliser pour les dates en JS ?

Breaking news 📢 ! Après avoir été décriée par beaucoup de monde, cette semaine la bibliothèque Moment.js a finalement jeté l'éponge... Et décidé de passer le projet en mode "maintenance" uniquement.

Ce qui est reproché à Moment.js, c'est principalement :

  • sa taille énorme, et l’impossibilité de tirer avantage du tree-shaking
  • la mutabilité des objets Moment, considérée comme une mauvaise pratique

Le coup de grâce 🗡️ a sûrement été donné par Google, qui a ajouté dans Lighthouse (son outil d'optimisation intégré à Chrome) une alerte indiquant qu'il faudrait remplacer Moment.js par une alternative moins lourde…

Donc à partir de maintenant, il est toujours possible d’utiliser Moment.js dans nos projets, mais il faut savoir qu’aucune nouvelle version (autre que corrective) ne verra le jour… Et qu’il est fortement recommandé de ne pas l’ajouter dans un nouveau projet !

Alors si vous cherchez comment remplacer Moment.js dans votre projet, ou si vous voulez choisir une bonne lib javascript de manipulation des dates, voici une petite liste de quelques alternatives existantes à l’heure actuelle. Et si vous hésitez encore, n’hésitez pas à nous contacter, et nous pourrons vous guider sur ce choix !

Luxon

Cette alternative pourrait être considérée comme une évolution de Moment.js. Elle a été créée par l’un des principaux contributeurs de Moment.js. Luxon utilise en interne l’API Intl de ECMAScript pour les traductions et les timezones, ce qui réduit considérablement sa taille par rapport à Moment.js. Passer de Moment à Luxon devrait être assez simple.
⇒ https://moment.github.io/luxon

Day.js

Sans être un remplacement exact de Moment.js, cette petite lib utilise une API très similaire, ce qui en fait une bonne candidate au remplacement de Moment dans un projet existant. Cela dit, la gestion de l’internationalisation se fait avec des fichiers de langue, fournis à part, ce qui peut augmenter la taille du bundle résultant.
⇒ https://day.js.org

date-fns

Plus éloignée de la façon de faire de Moment.js, date-fns n’est pas un API à proprement parler, mais fournit plutôt une série de fonctions utilitaires qui permettent de simplifier la manipulation de l’objet Date de JavaScript. De même, pour les traductions il faut fournir des fichiers séparés à importer dans le projet.
⇒ https://date-fns.org

Autre chose ?

Enfin, il est bien sûr toujours possible de ne pas utiliser de bibliothèque du tout pour la manipulation et la traduction des dates en javascript… Mais cela peut-être assez fastidieux car l’objet Date de JS n’est pas très bien pensé, et assez complexe à manipuler. 🤔

Cela dit, le TC39 travaille actuellement à l’élaboration d’un nouvel objet natif permettant de manipuler des dates en JavaScript. Il s’agit de Temporal, qui en est actuellement à l’étape 2 🚀 du processus d’intégration au standard ECMAScript, ce qui veut dire que l’on ne peut donc pas encore l’utiliser directement sans avoir besoin d’un Polyfill.

Nous suivrons tout cela de près, et vous tiendrons informés ! En attendant, n’hésitez pas à nous demander conseil sur les bonnes pratiques à mettre en place pour la manipulation des dates en javascript !