4

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

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

解决方案:

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

3 回答 3

6

它没有错误。日期解析函数的实现因浏览器而异,它接受的dateString格式也不同。

然而,这种格式似乎在...链接中工作相同:

 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,因此必须在将月份传递给构造函数之前对其进行修改。

参考

于 2013-10-24T06:08:47.347 回答
2

看到这个线程:

为什么 Date.parse 给出不正确的结果?

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

于 2013-10-24T06:08:14.570 回答
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]));
}
于 2013-10-24T06:46:49.473 回答