3

简单的功能在Internet Explorer 8Date.parse()中无法正常工作。 我用来验证格式的日期。
Date.parse()"MM/DD/YYYY"

  • _.isNaN(Date.parse("99/99/9999"))返回true- 日期无效
  • _.isNaN(Date.parse("01/01/1990"))返回false- 日期有效

但是现在我在 IE 8 中尝试了我的 JavaScript,我很困惑。

  • "88/88/8888"- 这个日期一切正常 - 日期无效。
  • "13/35/2012"- 无效日期,但Date.parse("13/35/2012")仅在 IE 中解析此日期且不返回NaN

jsFiddle 演示

有任何想法吗?

4

3 回答 3

3

标准 JavaScript 只接受 RFC 2822 日期,看起来不像。您必须编写自己的代码来分离日期部分,将它们转换为数字,并以Date这种方式创建实例。

Internet Explorer 还支持 ISO 日期 (2012-09-20 08:22),它实际上会解析“MM/DD/YYYY”日期。它为您的“2012 年 13 月 35 日”日期执行此操作,就 JavaScript 而言,这是一个完全有效的日期:它是 2013 年 2 月 4 日。JavaScript“修复”虚假日期;一年中的第十三个月是次年的第一个月,当月的第 35 天(如果是 1 月,则为 31 天)是下个月的第四天。

基本上,您期望 Date 解析器的行为与实际行为不同。

于 2012-09-20T13:20:34.487 回答
1

这里这里这里。一般来说Date.parse()不是跨浏览器的解决方案。有很多可用的插件和库,只需 google 即可。

于 2012-09-20T13:22:26.237 回答
0

我使用我的方法进行日期验证

   var isValidDate = function(dateAsString)
   {
      var parsedDate = Date.parse(dateAsString);
      if (_.isNaN(parsedDate) || !_.isEqual(new Date(parsedDate).format("mm/dd/yyyy"), dateAsString))
      {
         return false
      }

      return true
   }
于 2012-09-25T12:24:46.927 回答