我正在尝试使用moment.js在javascript中验证ISO 8601日期。
console.log(moment("2011-10-10T14:48:00", "YYYY-MM-DD", true).isValid())
它返回false。我错在哪里?日期类型格式不正确吗?
版本:Moment 2.5.1
我正在尝试使用moment.js在javascript中验证ISO 8601日期。
console.log(moment("2011-10-10T14:48:00", "YYYY-MM-DD", true).isValid())
它返回false。我错在哪里?日期类型格式不正确吗?
版本:Moment 2.5.1
为了避免使用字符串模式作为第二个参数,您可以直接调用:
moment("2011-10-10T14:48:00", moment.ISO_8601).isValid() // true
moment("2016-10-13T08:35:47.510Z", moment.ISO_8601).isValid() // true
moment("1466113", moment.ISO_8601, true).isValid()
来验证避免使用字符串模式不一定适用于所有情况。 - WhiteKnight不确定为什么 Praveen 在 jsfiddle 中的示例可以工作,但您的示例之所以无法工作是因为格式不是 YYYY-MM-DD。它还包括时间,因此被视为无效。如果您在日期中不使用时间,则返回 true。
请尝试使用以下内容:
moment("2011-10-10T14:48:00", "YYYY-MM-DDTHH:mm:ss", true).isValid()
好的,我找到了。
根据文档,
从2.3.0版本开始,您可以为最后一个参数指定一个
布尔值
,以使Moment使用严格解析。 严格解析要求格式和输入完全匹配。
因为您使用了严格操作,它返回false
。 为了克服这个问题,请使用以下代码:
alert(moment("2011-10-10T14:48:00", "YYYY-MM-DDTHH:mm:ss", true).isValid())
//This will return true
如果您取消严格解析
,
alert(moment("2011-10-10T14:48:00", "YYYY-MM-DD").isValid())
//This will return true
console.log(moment("2011-10-10T14:48:00", "YYYY-MM-DD", false).isValid())
console.log(moment("2011-10-10T14:48:00", "YYYY-MM-DDTHH:mm:ss", true).isValid())