日期字符串,忽略时区偏移量

4

我在(UTS-05:00)东部时间(美国和加拿大)。

也就是说,new Date().getTimezoneOffset() == 300 秒。

现在,我有一个API端点(JSON),返回一个类似于这样的日期字符串。

{
    someDate: '2016-01-01T00:40:00.000+00:00'
}

这里,我像这样将它传递给Date构造函数

var dateString = "2016-01-01T00:40:00.000+00:00";
var someDay = new Date(dateString);
console.log(someDay)

火狐浏览器控制台显示

日期 {Fri Jan 01 2016 00:40:00 GMT-0500 (Eastern Summer Time)}

谷歌浏览器控制台显示

Thu Dec 31 2015 19:40:00 GMT-0500 (Eastern Standard Time)

Chrome 考虑了时区偏移量而 Firefox 没有。有什么方法可以在 Chrome 中获取不考虑偏移量的日期,就像在 Firefox 中一样?


1
如果你仅使用Javascript的Date去处理问题,那么你将会面临很多麻烦。强烈推荐使用moment和moment-timezone,特别是在你需要进行更深入操作时(如你所描述的情况)。 - ach
@ach:我知道 :( 不过我正在努力避免更多的依赖。 - naveen
我在两个浏览器中得到了相同的结果。预期结果是什么? - Salman A
@SalmanA:你需要手动更改时区并进行检查。由于我正在运行一个刚过午夜的时间进行测试,因此应将时区设置为负值。我选择了美国时区http://imgur.com/KKPCVGd - naveen
两个时间都显示相同的时间?我一点也不确定。时间,它在 Chrome 中没有改变为“06:10 AM”吗? - naveen
显示剩余3条评论
2个回答

3

你可以通过以下方式实现:

 var dates = '2016-01-01T00:40:00.000+00:00'.split(/-|T|:/);
 var newDate = new Date(dates[0], dates[1]-1, dates[2], dates[3], dates[4]);

希望这很简单 :) http://imgur.com/KKPCVGd 尝试将您的系统设置为另一个时区并尝试。 - naveen
很奇怪。官方API(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Parameters)说:“当使用多个参数调用Date作为构造函数时,指定的参数表示本地时间。如果需要UTC,请使用具有相同参数的new Date(Date.UTC(...))。”如何检查FireFox和Chrome中的日期是否不同? - Yan Pak
我将时间设置为上午12:40,并手动将系统时钟时区设置为-5并进行了测试。在我看来,Mozilla的行为符合预期。 - naveen
但是,如果您使用带有前缀UTC的getter(getUTCHours(),getUTCMinutes()...),则Chrome和FireFox浏览器中的结果应该相同。 - Yan Pak
最终某种方法好像起作用了,我不知道为什么构造函数没起作用。再次感谢您的帮助! - naveen
1
@naveen:[请查看MDN文档_注意:由于浏览器之间存在差异和不一致性,强烈不建议使用Date构造函数(以及Date.parse,它们是等效的)来解析日期字符串。] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date#Parameters) - Pranav C Balan

0

这个 hack 能用(虽然不是很干净,但能解决问题)

var dateString = '2016-07-27T01:40:30';
var dateParts = dateString.split(/-|T|:/);
var saneDate = new Date(
    +dateParts[0], 
    dateParts[1] - 1, 
    +dateParts[2], 
    +dateParts[3], 
    +dateParts[4], 
    +dateParts[5]);
console.log(saneDate);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接