Chrome无法在javascript中返回正确的小时数

时间:2013-10-24 05:54:00

标签: javascript google-chrome time

首先尝试在IE 9控制台中:

new Date('2013-10-24T07:32:53') 
Thu Oct 24 07:32:53 UTC+0200 2013 

按预期返回

接下来尝试使用FireFox 24控制台:

new Date('2013-10-24T07:32:53')
Date {Thu Oct 24 2013 07:32:53 GMT+0200 (Central Europe Standard Time)}

然后我进入Chrome 30控制台:

new Date('2013-10-24T07:32:53')
Thu Oct 24 2013 09:32:53 GMT+0200 (Central Europe Daylight Time)

但是时间 09 ,应该 07

这是chrome中的错误还是我在这里做错了什么?

我不能使用除了这个'2013-10-24T07:32:53'之外的任何其他格式,我从C#获得JSON。 我需要获取此时间戳的小时数,getHours我在Chrome中获得了incorect值。

解决方案:

var inputHour = input.split('T')[1];
inputHour = inputHour.substring(0, 2);

3 个答案:

答案 0 :(得分:6)

它没有错误。日期解析功能的实现因浏览器而异。 dateString 的格式也是如此。

然而,这种格式似乎在... link

之间有效
 new Date("October 13, 1975 11:13:00")

如果可能,请尝试使用

new Date(year, month, day, hours, minutes, seconds, milliseconds)

保证结果。


关于您的格式,请尝试自行解析。类似的东西:

var str = '2013-10-24T07:32:53'.split("T");
var date = str[0].split("-");
var time = str[1].split(":");

var myDate = new Date(date[0], date[1]-1, date[2], time[0], time[1], time[2], 0);

注意(感谢RobG):上面使用的Date构造函数预计月份为0 - 11&因为10月是10日期字符串,所以必须在将月份传递给构造函数之前修改月份。

Reference

答案 1 :(得分:2)

见这个帖子:

Why does Date.parse give incorrect results?

看起来Date构造函数的解析签名的行为完全取决于实现。

答案 2 :(得分:0)

假设:

var s = '2013-10-24T07:32:53';

在符合ES5标准的浏览器中,您可以这样做:

var d = new Date(s + 'Z');

但是为了兼容所有正在使用的浏览器,最好使用(假设日期为UTC):

function dateFromString(s) {
  s = s.split(/\D/);
  return new Date(Date.UTC(s[0],--s[1],s[2],s[3],s[4],s[5]));
}