Попередження про припинення роботи в 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.