Warning: Date.prototype.toLocaleFormat is deprecated

Застереження JavaScript "Date.prototype.toLocaleFormat is deprecated; consider using Intl.DateTimeFormat instead" виникає, коли використовується нестандартний метод Date.prototype.toLocaleFormat.

Повідомлення

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

Тип помилки

Застереження. Виконання JavaScript не буде зупинене.

Що сталось?

Нестандартний метод Date.prototype.toLocaleFormat застарів та більше не рекомендований до використання. Він використовує рядок форматування в такому ж форматі, який очікується функцією strftime() у C. Функція більше недоступна у Firefox 58+.

Приклади

Застарілий синтаксис

Метод Date.prototype.toLocaleFormat застарів та буде прибраний (без кросбраузерної підтримки, доступний лише у Firefox).

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

console.log(date);
// У німецькій локалі
// "Freitag, 10. März 2017"

Альтернативний стандартний синтаксис за допомогою ECMAScript Intl API

Стандарт ECMA-402 (ECMAScript Intl API) визначає стандартні об'єкти та методи, які вможливлюють чутливе до мови форматування дати та часу (доступні у Chrome 24+, Firefox 29+, IE11+, Safari10+).

Ви тепер можете або використати метод Date.prototype.toLocaleDateString, якщо ви бажаєте просто відформатувати одну дату.

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

console.log(date);
// "Freitag, 10. März 2017"

Або ви можете скористатись об'єктом Intl.DateTimeFormat, який дозволяє кешувати об'єкт, в якому більшість обчислень вже зроблені, тому форматування відбувається швидко. Це корисно, якщо у вас є цикл дат для форматування.

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"

Альтернативний стандартний синтаксис з використанням методів Date

Об'єкт Date пропонує декілька методів для створення налаштованого рядка дати.

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

Можна перетворити на:

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

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

Див. також