IE JavaScript日期解析错误

时间:2010-06-11 05:58:06

标签: datetime parsing javascript

为什么IE无法将此字符串解析为Date对象。

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

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

感谢。

6 个答案:

答案 0 :(得分:10)

我发现jQuery Globalization Plugin日期解析效果最好。其他方法有跨浏览器问题,像date.js这样的东西在很长一段时间内都没有更新。

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

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

答案 1 :(得分:9)

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

例如,在IE6 for Windows XP中,字符串采用以下格式:

Tue Dec 05 16:47:20 CDT 2006

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

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

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:1)

问题

如果您的日期像datetime一样存储在SQL 2020-04-07 05:30:00中,并且想在IE中进行解析。当您使用new Date()在IE中使用JavaScript解析时,它会输出无效日期,而最新版本的Chrome和Firefox会正确解析该日期。

解决方案

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

示例

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:-1)

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

Problem with Javascript Date function in IE 7, returns NaN