Chrome在javascript中没有返回正确的小时数
第一次尝试是在IE 9控制台中: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
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]));
}