Как справиться с предупреждением об устаревании в momentjs

Я хочу использовать momentjs для проверки недопустимых строк даты/времени:

var invalid = '2017-03-18 23;00;00';
if (moment(invalid).isValid()) {
  return 'valid date'
}

Это (правильно) выбрасывает stacktrace со знакомым предупреждением "Предупреждение об отставке": данное значение не указано в признанном формате RFC2822 или ISO... "

Но даже если добавить try/catch:

try {
  var invalid = '2017-03-18 23;00;00';
  if (moment(invalid).isValid()) {
    return 'valid date'
  }
catch (err) {
  throw Error ('invalid date format');
}

файл stacktrace все еще печатается. Что мне нужно сделать, чтобы избежать отпечатки stacktrace?

Я искал все похожие вопросы в StackOverflow, но все они пытаются решить другую проблему (исправление ввода или поиск правильного синтаксиса для синтаксического анализа ввода).

Я использую v2.18.1.

Ответ 1

Вы должны использовать moment(String, String); для анализа вашего ввода. Если вы не хотите указывать формат (или массив форматов), вы можете использовать moment.ISO_8601. Как говорится в документах:

Moment уже поддерживает разбор строк iso-8601, но это можно явно указывать в формате/списке форматов при создании момента

Таким образом, у вас не будет предупреждения об устаревании. Вот рабочий пример:

var invalid = '2017-03-18 23;00;00';
if (moment(invalid, moment.ISO_8601).isValid()) {
  console.log('valid date');
} else {
  console.log('invalid date');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

Ответ 2

Укажите формат строки для вашей даты, тогда предупреждение исчезнет

moment("2017-1-27", 'YYYY-M-D').format('DD MMMM YYYY')

Ответ 3

Ниже приведено описание для удаления предупреждений RFC2822

Используйте момент (String, FormatString) для преобразования строки в дату.

 var newDt = Moment(this.state.dob,"MM/DD/YY")

И ниже код от даты до строки

var dt = Moment(newDt).format("YYYY-MM-DD") 

Таким образом, он не будет отображать предупреждающие сообщения.

Ответ 4

Добавление .format() без каких-либо аргументов в выражение момента, которое вызывало это предупреждение, было для меня решением:

moment(r.created_at.toDate()).format()