在IE 8中从字符串转换为日期后,javascript给出了错误的日期

时间:2014-04-02 06:19:03

标签: javascript date

我以我的应用程序的日期格式为例如。

2013-05-01T00:00:00

我将此转换为日期

var d = '2013-05-01T00:00:00'
var result = new Date(d);

result作为NaN

当我这样做时,

var result = new Date(d.replace(/-/g, '/'));

获得结果,

Tue Apr 30 22:30:00 UTC+0530 2013

这可能是我在1天前获得约会的原因..

1 个答案:

答案 0 :(得分:0)

你应该总是自己解析日期字符串,浏览器是非常糟糕的。例如,一些浏览器会对待2013-05-01T00:00:00'作为UTC,其他人作为本地。它应该treated as UTC(因为缺少时区),所以:

function parseDateString(s) {
    s = s.match(/\d+/g);
    return new Date(Date.UTC(s[0], --s[1], s[2], s[3], s[4], s[5], (s[6] || 0));
}

将使用以上值作为UTC创建日期对象,并根据当前系统设置创建时区偏移量。因此,如果您当前的时区是UTC + 0530,那么您应该得到相当于:

2013-05-01T05:30:00+0530

但是你似乎得到了UTC-0130的值。我对此一无所知。

哦,当你这样做时:

new Date(d.replace(/-/g, '/'));

你完全修改了字符串,所以它不是ISO 8601字符串,你完全受制于依赖于实现的日期解析器(即每种实现都可能不同,如果可能的话)。