Попередження про припинення роботи в Moment.js - Не у визнаному форматі ISO


176

Я отримую попередження про те, що значення, яке надається на даний момент, не у визнаному форматі ISO. Я змінив свою змінну сьогодні функцією моменту, і вона все ще не працює.

Ось помилка попередження:

Попередження про депресацію: надане значення не в розпізнаному форматі ISO. Момент побудови повертається до js Date (), який не є надійним для всіх браузерів та версій. Формати дат, які не належать ISO, не відмовляються і будуть видалені в майбутньому великому випуску. Для отримання додаткової інформації зверніться до http://momentjs.com/guides/#/warnings/js-date/ . Аргументи: [0] _isAMomentObject: true, _isUTC: true, _useUTC: true, _l: undefined, _i: 2016-9-26 19:30, _f: undefined, _strict: undefined, _locale: [object object]

var entryDate = new Date();
var currentDate = entryDate.getDate();

function between(x, min, max) {
  return x.valueOf() >= min.valueOf() && x < max.valueOf();
}

$('#custom1').change(function () {
  if ($('#custom1 :selected').val() == 'AU') {
    var keyword = '';

    var aus1_s = moment.tz('2016-9-26 19:30', 'Australia/Sydney');
    var aus2_s = moment.tz('2016-10-2 19:30', 'Australia/Sydney');
    var aus3_s = moment.tz('2016-10-9 19:30', 'Australia/Sydney');
    var aus4_s = moment.tz('2016-10-16 19:30', 'Australia/Sydney');
    var aus5_s = moment.tz('2016-10-23 19:30', 'Australia/Sydney');
    var aus6_s = moment.tz('2016-10-30 19:30', 'Australia/Sydney');
    var aus6_e = moment.tz('2016-11-5 19:30', 'Australia/Sydney');
  } else if ($('#custom1 :selected').val() == 'NZ') {
    var aus1_s = moment.tz('2016-9-28 20:30', 'Pacific/Auckland');
    var aus2_s = moment.tz('2016-10-4 20:30', 'Pacific/Auckland');
    var aus3_s = moment.tz('2016-10-11 20:30', 'Pacific/Auckland');
    var aus4_s = moment.tz('2016-10-18 20:30', 'Pacific/Auckland');
    var aus5_s = moment.tz('2016-10-25 20:30', 'Pacific/Auckland');
    var aus6_s = moment.tz('2016-11-2 20:30', 'Pacific/Auckland');
    var aus6_e = moment.tz('2016-11-9 20:30', 'Pacific/Auckland');
  } else {
    $('#entryEquals').val('');
    return false;
  }

  var today = moment();

  switch (true) {
    case between(today, aus1_s, aus2_s):
      keyword = 'RElYT04=';
      break;

    case between(today, aus2_s, aus3_s):
      keyword = 'QlJJREU=';
      break;

    case between(today, aus3_s, aus4_s):
      keyword = 'U1lETkVZ';
      break;

    case between(today, aus4_s, aus5_s):
      keyword = 'R1JPT00=';
      break;

    case between(today, aus5_s, aus6_s):
      keyword = 'V0VERElORw==';
      break;

    case between(today, aus6_s, aus6_e):
      keyword = 'VExD';
      break;

    default:
      $('#entryEquals').val('');
      break;
  }

  $('#entryEquals').val(keyword);
});

1
Я думаю, що попередження стосується '2016-9-26 19:30'такого, що не є визнаним форматом ISO
Jaromanda X

яка помилка у форматі? тому мені потрібно додати 0?
Джемай

1
Ви можете зробити moment.tz('2016-9-28 20:30', 'YYYY-M-D H:mm', 'Pacific/Auckland');згідно з документацією ... це прийме
одно-

2
Помилка полягає в тому, що формат, який ви надаєте, не є визнаним форматом ISO ... або надайте розпізнаний формат ISO, або надайте рядок, який "натякає" на очікуваний формат
Jaromanda X

Добре дякую, як щодо цього можна також додати цей формат? var сьогодні = moment.tz (todaystring, $. urlParam ('t_zone'));
Джемай

Відповіді:


180

Перевірте всю їхню дивовижну документацію!

Ось де вони обговорюють Попереджувальне повідомлення .

Рядок + формат

Попередження: Підтримка браузера для розбору рядків суперечлива. Оскільки немає специфікації, які формати слід підтримувати, те, що працює в деяких браузерах, не працюватиме в інших браузерах.

Для послідовного аналізу результатів будь-якого іншого, крім рядків ISO 8601, слід використовувати String + Format .

moment("12-25-1995", "MM-DD-YYYY");

String + Formats (декілька форматів)

Якщо у вас є більше одного формату, перегляньте їх String + Formats (з 's').

Якщо ви не знаєте точного формату вхідного рядка, але знаєте, що це може бути одним із багатьох, ви можете використовувати масив форматів.

moment("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);

Будь ласка, огляньте документацію, щоб отримати щось більш конкретне.

Часовий пояс

Оформлення замовлення Парсінг в зоні , еквівалентна документація для часових поясів.

Конструктор moment.tz приймає всі ті ж аргументи, що й конструктор моменту, але використовує останній аргумент як ідентифікатор часового поясу.

var b = moment.tz("May 12th 2014 8PM", "MMM Do YYYY hA", "America/Toronto");

EDIT

//...
var dateFormat = "YYYY-M-D H:m"; //<-------- This part will get rid of the warning.
var aus1_s, aus2_s, aus3_s, aus4_s, aus5_s, aus6_s, aus6_e;
if ($("#custom1 :selected").val() == "AU" ) {
    var region = 'Australia/Sydney';

    aus1_s = moment.tz('2016-9-26 19:30', dateFormat, region);              
    aus2_s = moment.tz('2016-10-2 19:30', dateFormat, region);              
    aus3_s = moment.tz('2016-10-9 19:30', dateFormat, region);                  
    aus4_s = moment.tz('2016-10-16 19:30', dateFormat, region);                 
    aus5_s = moment.tz('2016-10-23 19:30', dateFormat, region);
    aus6_s = moment.tz('2016-10-30 19:30', dateFormat, region);
    aus6_e = moment.tz('2016-11-5 19:30', dateFormat, region);
} else if ($("#custom1 :selected").val() == "NZ" ) {
    var region = 'Pacific/Auckland';

    aus1_s =  moment.tz('2016-9-28 20:30', dateFormat, region);
    aus2_s =  moment.tz('2016-10-4 20:30', dateFormat, region);
    aus3_s =  moment.tz('2016-10-11 20:30', dateFormat, region);
    aus4_s =  moment.tz('2016-10-18 20:30', dateFormat, region);
    aus5_s =  moment.tz('2016-10-25 20:30', dateFormat, region);
    aus6_s =  moment.tz('2016-11-2 20:30', dateFormat, region);
    aus6_e =  moment.tz('2016-11-9 20:30', dateFormat, region);
}
//...

89
Замість того, щоб копіювати та вставляти документацію, будь ласка, надайте фактичну відповідь.
Ребс

2
саме це допомогло мені поставити формат на "введення" - момент ("12-25-1995", ["MM-DD-YYYY", "РРРР-MM-DD"]);
Демодав

2
@Rebs Я думаю, що я додав багато документації, оскільки загальне рішення не є прямим. Очевидно, що конкретне рішення для Джемай повинно було відповісти, і я додав його з тих пір (дякую тобі!), Але перше, чому тут так багато документації.
christo8989

Дякую, але що, якщо ви просто хочете просту дату без цієї важкої формулювальної рамки, ми можемо просто проігнорувати це попередження?
Веб-жінка

це мені допомогло -> момент ("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);
Сезар Родрігес T

50

Це для мене працює:

moment(new Date("27/04/2016")).format

5
Це найпростіша робота з уникнення забруднення консолі
Джосі

2
Я б не радив такому підходу для тих, хто має справу з підтримкою IE в будь-якій мірі. Результати дуже хиткі, особливо в IE 11.
Ajm113,

1
Це найпростіша і точна відповідь. Спасибі це мені допомогло.
Тахір Африді

15

Я зіткнувся з цією помилкою, тому що намагався перейти на побачення з localStorage. Перенесення дати в новий Dateоб’єкт, а потім виклик .toISOString () зробив для мене хитрість:

const dateFromStorage = localStorage.getItem('someDate');
const date = new Date(dateFromStorage);
const momentDate = moment(date.toISOString());

Це придушило будь-які попередження в консолі.


Це придушить попередження, але зворотним боком є, якщо ви специфічні для часового поясу, то я б не пропонував цього: бо це перетворить дану дату в UTC, як ми говоримо '.toISOString ()'. Спробуйте "момент (нова дата (" 27/04/2016 ")). Формат", як зазначено в іншій відповіді - який би зберігав час у місцевому ..
whoami

15

використовуйте момент у своїй функції, як це

 moment(new Date(date)).format('MM/DD/YYYY')

Це коротка відповідь, яку ви шукаєте, якщо ви просто хочете позбутися від "знеціненого попередження"
VictorC

6

Ця відповідь - краще зрозуміти це попередження

Попередження про анулювання викликається, коли ви використовуєте момент для створення часового об’єкта, var today = moment(); .

Якщо з цим попередженням у вас добре, тоді у мене є більш простий метод.

Не використовуйте замість цього dateоб'єкт . Наприклад, використанняjsmomentmoment() для отримання поточної дати.

Або конвертувати jsоб’єкт momentдати на дату. Ви можете просто зробити це, вказавши свій форматjs об'єкта дати.

тобто moment("js date", "js date format");

наприклад:

moment("2014 04 25", "YYYY MM DD");

(АЛЕ ВИ МОЖЕТЕ ВИКОРИСТОВУВАТИ ЦІЙ МЕТОД, ПІД ЧИСЛИМ ДЕПРИКАТИВАНОМ, це може зменшитися momentв майбутньому)


6
Серйозно! питання про те, як зняти це попередження про депресію! не запитуючи, як використовувати цю депресію! Крім того, це "це буде видалено в майбутньому", не "це може знецінитися з моменту в майбутньому", це вже застаріло!
Аль-Мотафар

@ Al-Mothafar, у мене є невеликі сумніви, чому ти вийшов за межі, коли ifстан не вдався. Вам слід вийти з відповіді, не продовжувати.
Saahithyan Vigneswaran

2
Дякую, це відповідь, яка справді показала мені, що я тут можу знати.
DigitalDesignDj

3

Можна використовувати

moment(date,"currentFormat").format("requiredFormat");

Це слід використовувати, коли дата не є формат ISO, оскільки вона вказує момент, що це наш формат.


1
Хоча цей код може відповісти на питання, надаючи додатковий контекст щодо того, як та / або чому він вирішує проблему, покращить довгострокове значення відповіді.
леопал

@leopal вніс деякі зміни!
ЗІБ 30

2

Розбір рядка з moment.js.

const date = '1231231231231' //Example String date
const parsed = moment(+date);

Це допоможе мені позбутися попередження про депресію, коли я намагався використовувати формат Unix, щоб отримати номер тижня.
curious.netter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.