我正在尝试使用moment.js验证javascript中的ISO 8601日期
console.log(moment("2011-10-10T14:48:00", "YYYY-MM-DD", true).isValid())
返回false。我哪里错了?日期类型格式不正确吗?
版本:时刻2.5.1
答案 0 :(得分:38)
为避免使用字符串模式作为第二个参数,您只需调用:
moment("2011-10-10T14:48:00", moment.ISO_8601).isValid() // true
moment("2016-10-13T08:35:47.510Z", moment.ISO_8601).isValid() // true
答案 1 :(得分:11)
不确定为什么Praveen的示例在jsfiddle中起作用,但是样本不起作用的原因是因为格式不是YYYY-MM-DD。它也包括时间,所以它被认为是无效的。如果你在没有时间的情况下尝试它,它会返回true。
请尝试这样做:
moment("2011-10-10T14:48:00", "YYYY-MM-DDTHH:mm:ss", true).isValid()
答案 2 :(得分:4)
好的,我找到了。
从版本2.3.0开始,您可以为最后一个参数指定
boolean
使Moment使用严格的解析。严格的解析需要 格式和输入完全匹配
因为您使用严格操作,它会返回 false
。要在代码下面克服这种用法:
alert(moment("2011-10-10T14:48:00", "YYYY-MM-DDTHH:mm:ss", true).isValid())
//This will return true
如果您删除 strict parsing
,
alert(moment("2011-10-10T14:48:00", "YYYY-MM-DD").isValid())
//This will return true
答案 3 :(得分:1)
使用它来匹配您的部分日期
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())