微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 JavaScript 中使用 ISO 8601 格式化带有时区偏移的日期?

如何解决如何在 JavaScript 中使用 ISO 8601 格式化带有时区偏移的日期?

这是一个简单的帮助函数,它将为您格式化 JS 日期。

function toIsoString(date) {
  var tzo = -date.getTimezoneOffset(),
      dif = tzo >= 0 ? '+' : '-',
      pad = function(num) {
          return (num < 10 ? '0' : '') + num;
      };

  return date.getFullYear() +
      '-' + pad(date.getMonth() + 1) +
      '-' + pad(date.getDate()) +
      'T' + pad(date.getHours()) +
      ':' + pad(date.getMinutes()) +
      ':' + pad(date.getSeconds()) +
      dif + pad(Math.floor(Math.abs(tzo) / 60)) +
      ':' + pad(Math.abs(tzo) % 60);
}

var dt = new Date();
console.log(toIsoString(dt));

解决方法

目标: 找到local timeUTC time offset构造以下格式的 URL。

示例网址:/Actions/Sleep?duration=2002-10-10T12:00:00鈭�05:00

格式基于W3C 推荐。文档说:

例如,2002-10-10T12:00:00-05:00(2002 年 10 月 10 日中午,美国中部夏令时和东部标准时间)等于
2002-10-10T17:00:00Z ,比 2002-10-10T12:00:00Z 晚了五个小时。

所以根据我的理解,我需要找到我的当地时间,new Date()然后使用getTimezoneOffset()函数来计算差异,然后将它附加到字符串的末尾。

  1. 获取当地时间format

    var local = new Date().format("yyyy-MM-ddThh:mm:ss"); // 2013-07-02T09:00:00
    
  2. 按小时获取 UTC 时间偏移量

    var offset = local.getTimezoneOffset() / 60; // 7
    
  3. 构建 URL(仅限时间部分)

    var duration = local + "-" + offset + ":00"; // 2013-07-02T09:00:00-7:00
    

上面的输出意味着我的当地时间是 2013/07/02 上午 9 点,与 UTC 的差异是 7 小时(UTC 比当地时间早 7 小时)

到目前为止,它似乎有效,但如果getTimezoneOffset()返回负值(如 -120)呢?

我想知道在这种情况下格式应该是什么样子,因为我无法从 W3C 文档中弄清楚。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。