【问题标题】:IE JavaScript date parsing errorIE JavaScript 日期解析错误
【发布时间】:2010-06-11 05:58:06
【问题描述】:

为什么 IE 不能将此字符串解析为 Date 对象。

var d = Date.parse("Fri Jun 11 04:55:12 +0000 2010"); // returns NaN

但是,它在 FireFox 中运行良好。我正在运行 IE 8。

谢谢。

【问题讨论】:

标签: datetime parsing javascript


【解决方案1】:

问题

如果您的日期存储在 SQL datetime 中,如 2020-04-07 05:30:00 并希望在 IE 中解析它。当您在 IE 中使用 new Date() 使用 JavaScript 解析它时,它会输出 Invalid Date,而最新版本的 Chrome 和 Firefox 会正确解析此日期。

解决方案

您必须在来自 SQL 的 datetime 字符串中将 <space> 替换为 T

示例

let myDate = '2020-04-07 05:30:00';
let myFormattedDate = myDate.replace(' ', 'T'); // '2020-04-07T05:30:00'
console.log(new Date(myFormattedDate));

【讨论】:

    【解决方案2】:

    您在 IE 8 中获得 NaN 值,它在 Firefox 中工作,因为字符串的格式因浏览器和操作系统而异。

    例如,在 Windows XP 的 IE6 中,字符串的格式如下:

    Tue Dec 05 16:47:20 CDT 2006
    

    但在 Firefox for Windows XP 中,字符串是

    Tue Dec 05 2006 16:47:20 GMT-0500
    

    要使其与这两种浏览器兼容,您必须首先检查您的浏览器 javascript 代码,然后相应地给出您输入的日期字符串。

    【讨论】:

    • 但是所有浏览器和平台上是否有兼容的通用格式?
    • 对我来说, .toJSON() 有效。它以类似于“yyyy-mm-ddTxx.xx”的格式返回日期。我在 IE8 和 FireFox 14 中尝试过。
    • 嗨,Internet Explorer 无法解析此日期 var date = new Date('23-JUL-15');而chrome可以解析它。如何在 IE 中做到这一点?
    【解决方案3】:

    通过创建一个日期对象解决了我的问题,让我把时间戳还给它。 但是为此,您需要将字符串转换为这种格式:

    year, month, date, hours, minutes, seconds,ms
    

    举个例子:

    dateObj = new Date(year, month, date);
    timestamp = dateObj.getTime();
    

    这可以保存在 IE 和 FF 中。

    IE Dev Center: Date Object (JavaScript)

    Mozilla Dev Network: Date

    对于你的例子,你会是这样的:

    //your string
    var str = "Fri Jun 11 04:55:12 +0000 2010";
    //maps months to integer from 0 to 11
    var monthArray = {"Jan":0, "Feb":1, "Mar":2, "Apr":3, "May":4, "Jun":5, "Jul":6, "Aug":7, "Sep":8, "Oct":9, "Nev":10, "Dec":11};
    //get the values from the string
    var regex = /^[^ ]+ ([^ ]+) (\d{1,2}) (\d{2}):(\d{2}):(\d{2}) \+(\d{4}) (\d{4})$/;
    match = regex.exec(str);
    var month   = monthArray[match[1]],
        date    = match[2],
        hours   = match[3],
        minutes = match[4],
        seconds = match[5],
        ms      = match[6],
        year    = match[7];
    
    //create date object with values
    var dateObject = new Date(year, month, date, hours, minutes , seconds, ms);
    
    var ts = dateObject.getTime(); //timestamp in ms
    

    【讨论】:

    • 这个!注意 jan 从 0 开始 :)
    【解决方案4】:

    我发现jQuery Globalization Plugin 日期解析效果最好。其他方法存在跨浏览器问题,并且 date.js 之类的东西已经有一段时间没有更新了。

    您也不需要页面上的 datePicker。您可以调用类似于文档中给出的示例的内容:

    $.datepicker.parseDate('yy-mm-dd', '2007-01-26');
    

    【讨论】:

      【解决方案5】:

      因为 +00000。尝试添加最后一个

      var d = Date.parse("Fri Jun 11 04:55:12 2010 +0000");
      

      【讨论】:

        【解决方案6】:

        这可能会对您有所帮助。我刚刚解决了一个类似的问题。

        Problem with Javascript Date function in IE 7, returns NaN

        【讨论】:

        • 有没有用没关系
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多