2012-01-16 106 views
6

我有一个包含时区偏移量的ISO8601日期(见下文)。当我从中创建一个Date对象时,日期对象被转换为我的时区(当前GMT),并且时区偏移量变为0.有什么办法让Date()构造函数保存时区偏移量?javascript日期 - 保留时区偏移量

var date = new Date("2012-01-17T12:55:00.000+01:00"); 
    console.log(date.toString()); 

我得到的输出是:

"Tue Jan 17 2012 11:55:00 GMT+0000 (GMT)" 

我想输出是:

"Tue Jan 17 2012 12:55:00" 
+0

通过复制和粘贴在谷歌浏览你的榜样,我得到的输出你想' Tue Jan 17 2012 12:55:00 GMT + 0100(巴黎,马德里)',你使用哪种浏览器? – 2012-01-16 17:17:02

+0

@ArnaudF。我强烈怀疑这是因为您当地的时区为GMT +1。在Chrome的德克萨斯州沃思堡,我得到:'Tue Jan 17 2012 05:55:00 GMT-0600(Central Standard Time)'。 – DMKing 2012-01-16 17:44:38

回答

8

不能与内置Date object,因为他们只知道本地(由用户的浏览器和/或操作系统设置定义)和UTC。您可以从课程中的许多克隆方法中看到这一点(例如,getHours/getUTCHours)。

getTimezoneOffset是唯一的时区信息,你真的有,但它是当地以及,将可能只给你一次+0(或+6在我的情况):

var date = new Date("2012-01-17T12:55:00.000+01:00"); 
console.log(date.getTimezoneOffset()/60.0); 

你可以试试timezone-js(或one of its forks),但你需要知道Olson timezone name不仅仅是GMT/UTC偏移:

var date = new new timezoneJS.Date('2012-01-17T12:55:00.000+01:00', 'Europe/Brussels'); 
alert(date.getTimezoneOffset()/60.0); // +1