JavaScript 日期-保留时区偏移量

6

我有一个包含时区偏移量的ISO8601日期(见下文)。当我从中创建一个Date对象时,该日期对象会被转换为我的时区(当前为GMT),并且时区偏移量变为0。是否有任何方法可以使Date()构造函数保留时区偏移量?

  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"

通过将您的示例复制并粘贴到Google Chrome中,我得到了您想要的输出“Tue Jan 17 2012 12:55:00 GMT+0100(巴黎,马德里)”,您使用哪个浏览器? - Arnaud F.
@ArnaudF。我强烈怀疑这是因为您的本地时区是GMT +1。在德克萨斯州沃思堡,我使用Chrome浏览器得到的结果是:“Tue Jan 17 2012 05:55:00 GMT-0600(中央标准时间)”。 - DMKing
1个回答

9
不使用内置的Date对象,因为它们只能识别本地时间(由用户浏览器和/或操作系统设置定义)和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(或者它的分支之一),但需要知道Olson时区名称,而不仅仅是GMT / UTC偏移量:
var date = new new timezoneJS.Date('2012-01-17T12:55:00.000+01:00', 'Europe/Brussels');
alert(date.getTimezoneOffset() / 60.0); // +1

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