MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Warning: Date.prototype.toLocaleFormat is deprecated

Message

Warning: Date.prototype.toLocaleFormat is deprecated; consider using Intl.DateTimeFormat instead

Type d'erreur

Un avertissement, l'exécution du script JavaScript n'est pas interrompue.

Quel est le problème ?

La méthode non-standard Date.prototype.toLocaleFormat est dépréciée et ne devrait plus être utilisée. Elle utilise une chaîne de caractères qui indique le format avec la même syntaxe que la fonction strftime() en C. L'implémentation sera complètement supprimée avec bug 818634.

Exemples

Syntaxe dépréciée

La méthode Date.prototype.toLocaleFormat est dépréciée et sera retirée (aucune prise en charge par les autres navigateurs en dehors de Firefox).

var today = new Date(); 
var date = today.toLocaleFormat('%A %e %B %Y');

console.log(date);
// En français
// "Vendredi 10 mars 2017"

Utiliser une syntaxe standard grâce à l'API ECMAScript Intl

Le standard ECMA-402 (l'API ECMAScript Intl) définit des objets et méthodes standards qui permettent de mettre en forme des dates et heures (disponible à partir de Chrome 24, de Firefox 29, d'IE11 et de  Safari10).

Si on souhaite uniquement formater une date, on pourra utiliser la méthode Date.prototype.toLocaleDateString.

var today = new Date();
var options = { weekday: 'long', year: 'numeric',
                month: 'long', day: 'numeric' };
var date = today.toLocaleDateString('fr-FR', options);

console.log(date);
// "Vendredi 10 mars 2017"

Si on manipule plus de dates, on peut utiliser l'objet Intl.DateTimeFormat qui permet de mettre en cache certains des calculs afin d'avoir une mise en forme rapide (ce qui s'avère utile lorsqu'on a une boucle par exemple) :

var options = { weekday: 'long', year: 'numeric', 
                month: 'long', day: 'numeric' }; 
var dateFormatter = new Intl.DateTimeFormat('de-DE', options)

var dates = [Date.UTC(2012, 11, 20, 3, 0, 0), 
             Date.UTC(2014, 04, 12, 8, 0, 0)]; 

dates.forEach(date => console.log(dateFormatter.format(date)));

// "Donnerstag, 20. Dezember 2012"
// "Montag, 12. Mai 2014"

Utiliser les méthodes de l'objet Date

L'objet Date dispose de plusieurs méthodes qui permettent de construire une chaîne de caractères pour une date donnée. Ainsi

(new Date()).toLocaleFormat("%Y%m%d");
// "20170310"

Pourra être converti en :

let now = new Date();
let date = now.getFullYear() * 10000 + 
          (now.getMonth() + 1) * 100 + now.getDate();

console.log(date);
// "20170310"

Voir aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : SphinxKnight
 Dernière mise à jour par : SphinxKnight,