我想使用momentjs来检查无效的日期/时间字符串:
var invalid = '2017-03-18 23;00;00';
if (moment(invalid).isValid()) {
return 'valid date'
}
Run Code Online (Sandbox Code Playgroud)
这(正确地)抛出了一个堆栈跟踪,其中包含熟悉的"弃用警告:提供的值不是公认的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');
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪仍然打印.我需要做些什么才能避免打印堆栈跟踪?
我在StackOverflow上搜索了所有类似的问题,但他们都试图解决一个不同的问题(修复输入或找到正确的语法来解析输入).
我使用的是v2.18.1.
Vin*_*zoC 39
您必须使用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');
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>Run Code Online (Sandbox Code Playgroud)
PS.无论如何,如果你有一个接受格式的列表,我建议使用moment(String, String[]);(并严格解析,如果需要).