【问题标题】:javascript date - preserve timezone offsetjavascript date - 保留时区偏移量
【发布时间】:2012-01-16 16:52:08
【问题描述】:

我有一个包含时区偏移量的 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 (Paris, Madrid)”,您使用哪种浏览器?
  • @ArnaudF。我强烈怀疑这是因为您当地的时区是 GMT +1。在德克萨斯州沃思堡的 Chrome 中,我得到:'Tue Jan 17 2012 05:55:00 GMT-0600 (Central Standard Time)'。

标签: javascript datetime timezone


【解决方案1】:

不适用于内置 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

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多