【问题标题】:Date.parse() doesn't work in IE 8Date.parse() 在 IE 8 中不起作用
【发布时间】:2012-09-20 13:15:59
【问题描述】:

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

  • _.isNaN(Date.parse("99/99/9999")) return 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 Demo

有什么想法吗?

【问题讨论】:

    标签: javascript date


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

           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
           }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-30
          • 2012-11-11
          • 1970-01-01
          • 2011-06-07
          • 2011-10-08
          相关资源
          最近更新 更多