Как обрабатывать предупреждение об устаревании в моментах
Я хочу использовать моментальные для проверки на недопустимые строки даты / времени:
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');
}
Это то, что сняло предупреждение в моем случае