Предупреждение об устаревании в 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');соответствии с документацией ... это будет принимать 1 или 2 цифры месяца и дня, 1 или 2 цифры часа в 24-часовом формате
Jaromanda X

2
Ошибка в том, что указанный вами формат не является признанным форматом ISO ... либо предоставьте признанный формат ISO, либо предоставьте строку, которая «намекает» на ожидаемый формат
Jaromanda X

Хорошо, спасибо, как насчет этого, я тоже могу добавить этот формат? var today = moment.tz (todaystring, $. urlParam ('t_zone'));
Джемаи

Ответы:


180

Проверьте всю их удивительную документацию!

Здесь они обсуждают предупреждающее сообщение .

Строка + Формат

Предупреждение. Браузерная поддержка для разбора строк противоречива. Поскольку нет спецификации, какие форматы должны поддерживаться, то, что работает в некоторых браузерах, не будет работать в других браузерах.

Для согласованного анализа результатов, отличных от строк ISO 8601, следует использовать String + Format .

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

Строка + Форматы (несколько форматов)

Если у вас более одного формата, проверьте их форматы String + (с 's').

Если вы не знаете точный формат входной строки, но знаете, что это может быть один из многих, вы можете использовать массив форматов.

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

Пожалуйста, ознакомьтесь с документацией для чего-то более конкретного.

Часовой пояс

Оформление заказа на разбор в Zone , эквивалентная документация для часовых поясов.

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

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

РЕДАКТИРОВАТЬ

//...
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
Вместо того, чтобы копировать и вставлять документацию, пожалуйста, предоставьте фактический ответ.
Ребс

3
это то, что помогло мне перевести формат в «ввод» - момент («12-25-1995», [«ММ-ДД-ГГГГ», «ГГГГ-ММ-ДД»]);
Демодаве

2
@ Ребс Я думаю, что я добавил много документации, потому что общее решение не является простым. Очевидно, что конкретное решение для Jemai должно было быть в ответе, и я добавил его с тех пор (спасибо вам!), Но первое - вот почему здесь так много документации.
christo8989

Спасибо, но что, если вы просто хотите простое свидание без этой тяжелой форматирующей среды, мы можем просто проигнорировать это предупреждение?
веб-леди

это помогло мне -> момент («12-25-1995», [«ММ-ДД-ГГГГ», «ГГГГ-ММ-ДД»]);
Сезар Родригес Т

50

Делать это работает для меня:

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

5
Это самый простой способ избежать загрязнения консоли
Josey

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')

Это краткий ответ, который вы ищете, если хотите просто избавиться от «
устаревшего

6

Этот ответ должен дать лучшее понимание этого предупреждения

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

Если это предупреждение с вами, у меня есть более простой метод.

Вместо этого не используйте dateобъект из jsиспользования moment. Например, используйте, moment()чтобы получить текущую дату.

Или преобразовать jsобъект momentдаты в дату. Вы можете просто сделать это, указав формат вашего jsобъекта даты.

т.е. moment("js date", "js date format");

например:

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

(НО ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ЭТОТ МЕТОД ТОЛЬКО ДО УСТАРЕВШЕГО, это может быть амортизировано momentв будущем)


6
Шутки в сторону! вопрос о том, как убрать это предупреждение об устаревании! не спрашиваю, как использовать эту амортизацию! также, это «это будет удалено в будущем», а не «это может быть амортизировано с момента в будущем», это уже устарело!
Аль-Мотафар

@ Аль-Мотафар, у меня есть небольшое сомнение, почему ты вышел за пределы, когда ifусловие не удалось. Вы должны выйти из ответа, а не продолжить.
Саахитян Виньесваран

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.