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

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

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

Это (правильно) создает стековую трассировку со знакомым предупреждением об устаревании: предоставленное значение не соответствует распознанному формату 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');
}

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

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

Я использовал v2.18.1.

3 ответа

Решение

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

Момент уже поддерживает синтаксический анализ строк 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>

PS. В любом случае, если у вас есть список принятых форматов, я предлагаю использовать moment(String, String[]); (и строгий разбор, если нужно).

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

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

Ниже работает для меня, чтобы удалить предупреждения RFC2822

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

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

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

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

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

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

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

Если вы работаете с объектом JS Date, вы конвертируете объект date toISOString как в примере ниже

const date = new Date()
if (moment(date.toISOString, moment.ISO_8601).isValid()) {
    console.log('valid date');
} else {
    console.log('invalid date');
}

Это то, что сняло предупреждение в моем случае

Другие вопросы по тегам