如何处理momentjs中的弃用警告

时间:2017-03-29 18:24:26

标签: momentjs

我想使用momentjs检查无效的日期/时间字符串:

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

仍然会打印堆栈跟踪。 我需要做些什么才能避免打印堆栈跟踪?

我已经在StackOverflow上搜索了所有类似的问题,但他们都试图解决一个不同的问题(修复输入或找到正确的语法来解析输入)。

我使用的是v2.18.1。

4 个答案:

答案 0 :(得分:32)

您必须使用moment(String, String);来解析输入。如果您不想指定格式(或array of formats),则可以使用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>
&#13;
&#13;
&#13;

PS。无论如何,如果你有一个接受格式的列表,我建议使用moment(String, String[]);(如果需要,还可以进行严格的解析)。

答案 1 :(得分:2)

指定日期的字符串格式,警告将消失

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

答案 2 :(得分:1)

以下为我工作以删除RFC2822警告

使用moment(String,FormatString)将字符串转换为日期。

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

以下是从日期到字符串的代码

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

通过这种方式,它不会显示警告消息。

答案 3 :(得分:0)

.format()添加到引起该警告的瞬间表达式中不带任何参数的解决方案:

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