我想使用 momentjs 检查无效的日期/时间字符串:
var invalid = '2017-03-18 23;00;00';
if (moment(invalid).isValid()) {
return 'valid date'
}
这(正确(抛出一个堆栈跟踪,其中包含熟悉的"弃用警告:提供的值不是可识别的RFC2822或 ISO 格式......">
但即使我添加一个尝试/捕获:
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。
您必须使用 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');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
附言。无论如何,如果你有一个接受格式的列表,我建议使用moment(String, String[]);
(如果需要,还可以进行严格的解析(。
指定日期的字符串格式,然后警告将消失
moment("2017-1-27", 'YYYY-M-D').format('DD MMMM YYYY')
<</div>
div class="one_answers"> 下面对我删除RFC2822警告
有用使用moment(字符串,格式字符串(将字符串转换为日期。
var newDt = Moment(this.state.dob,"MM/DD/YY")
下面的代码从日期到字符串
var dt = Moment(newDt).format("YYYY-MM-DD")
这样它就不会显示警告消息。
导致该警告的时刻表达式中添加.format()
没有任何参数是我的解决方案:
moment(r.created_at.toDate()).format()