我想使用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。
答案 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;
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()