Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chrome在javascript中没有返回正确的小时数_Javascript_Google Chrome_Time - Fatal编程技术网

Chrome在javascript中没有返回正确的小时数

Chrome在javascript中没有返回正确的小时数,javascript,google-chrome,time,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('20

第一次尝试是在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中的一个bug还是我做错了什么

除了我从C#通过JSON获得的“2013-10-24T07:32:53”格式,我不能使用任何其他格式。 我需要得到这个时间戳的小时数,通过
getHours
我可以得到Chrome中的increct值

解决方案:

var inputHour = input.split('T')[1];
inputHour = inputHour.substring(0, 2);
请参阅此线程:


看起来日期构造函数的解析签名行为完全依赖于实现。

没有bug。日期解析函数的实现在不同的浏览器中是不同的&它所接受的日期字符串的格式也是不同的

但是,此格式在…中的工作方式似乎相同:

如果可能,尝试使用

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):上面使用的日期构造函数预期月份为0-11,因为根据日期字符串,10月份是10月份,所以在将其传递给构造函数之前必须修改月份

.

给定:

var s = '2013-10-24T07:32:53';
在兼容ES5的浏览器中,您可以执行以下操作:

var d = new Date(s + 'Z');
但为了在使用中的所有浏览器之间兼容,最好使用(假设日期为UTC):


Chrome似乎希望您以GMT为单位传递时间,并将其转换为您的本地时间。其他浏览器将您传递的字符串解释为本地时间。我不确定哪个是正确的,或者它是否是规范的一部分。@MikeEdwards-ECMA-262 ed 5只指定一个字符串:。如果省略了时区指示符(Z),则返回到依赖于实现的状态(IE 8和更低版本无论如何都无法正确解析ISO字符串)。@Rumplin在符合ES5的浏览器的末尾加上一个“Z”,在IE 8和更低版本中仍然会失败。我确实尝试在末尾加上“Z”,但我仍然得到了09小时的时间。它“有效”对于我在Chrome中使用或不使用“Z”(v30),字符串被假定为UTC。符合ES5:。我不能使用任何其他格式。我从web服务获取“2013-10-24T07:32:53”,需要从JSON日期时间格式获取小时。为什么不在
T
处拆分字符串并自己构造新的日期时间字符串,然后…@Rumplin上面的解决方案假设字符串是本地时间,而不是UTC。这就是你想要的吗?它还会将月份设置为错误的值(它应该有
--date[1]
)。字符串中的时间是我需要读取的时间。无论UTC还是GMT.new日期(Date.parse('2013-10-24T07:32:53');返回与未使用“parse”时相同的结果@Rumplin-我认为您错过了答案:
Date.parse方法完全依赖于实现…我建议您手动解析日期字符串
,这是非常合理的建议。
var d = new Date(s + 'Z');
function dateFromString(s) {
  s = s.split(/\D/);
  return new Date(Date.UTC(s[0],--s[1],s[2],s[3],s[4],s[5]));
}