使用moment.js验证ISO 8601日期

时间:2014-03-04 06:27:29

标签: javascript momentjs

我正在尝试使用moment.js验证javascript中的ISO 8601日期

console.log(moment("2011-10-10T14:48:00", "YYYY-MM-DD", true).isValid())

返回false。我哪里错了?日期类型格式不正确吗?

版本:时刻2.5.1

4 个答案:

答案 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)

好的,我找到了。

根据documentation

  

从版本2.3.0开始,您可以为最后一个参数指定 boolean   使Moment使用严格的解析。严格的解析需要   格式和输入完全匹配

因为您使用严格操作,它会返回 false 。要在代码下面克服这种用法:

alert(moment("2011-10-10T14:48:00", "YYYY-MM-DDTHH:mm:ss", true).isValid())
//This will return true

demo1

如果您删除 strict parsing

alert(moment("2011-10-10T14:48:00", "YYYY-MM-DD").isValid())
//This will return true

demo2

答案 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())