【问题标题】:Validating a ISO 8601 date using moment.js使用 moment.js 验证 ISO 8601 日期
【发布时间】:2014-03-04 06:27:29
【问题描述】:

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

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

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

版本: Moment 2.5.1

【问题讨论】:

标签: javascript momentjs


【解决方案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 根据Wikipedia,YYYYMMDD 是一个有效的 ISO8601 日期。如果您只想使用连字符构成,那么您实际上只针对 ISO8601 的一个子集。
【解决方案2】:

不确定为什么 Praveen 的示例在 jsfiddle 中有效,但您的示例无效的原因是因为格式不是 YYYY-MM-DD。它也包括时间,因此它被认为是无效的。如果你在日期中没有时间的情况下尝试它,它会返回 true。

试试这个:
moment("2011-10-10T14:48:00", "YYYY-MM-DDTHH:mm:ss", true).isValid()

【讨论】:

    【解决方案3】:

    好的,我找到了。

    根据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

    【讨论】:

    • 这返回 true,我希望它是 false alert(moment("6205122", "YYYY-MM-DDTHH:mm:ss, true").isValid())
    • 第一个 jsfiddle 有错字: alert(moment("2011-10-10T14:48:00", "YYYY-MM-DDTHH:mm:ss, true").isValid() ) 双引号应该移到逗号之前,true 之前。
    【解决方案4】:

    用它来匹配你的部分日期

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

    【讨论】:

      猜你喜欢
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      相关资源
      最近更新 更多