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. Cette fonction n'est plus disponible √† partir de Firefox 58.

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