【问题标题】:Displaying Timezone abbreviation with Date.js使用 Date.js 显示时区缩写
【发布时间】:2013-08-06 19:24:03
【问题描述】:

我有一个脚本可以读取用户时区并根据用户显示时间。如何显示时区缩写?

我有一个游戏网站,我们在帖子中写道“我们将在 7:00 进行现场直播”。来自世界各地的用户阅读我们的博客,并希望观看直播。我有以下脚本应该读取用户的时区,并根据用户的居住地显示时间。

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Localtime</title>
  </head>
  <body>
    We'll be playing live at <span class="localtime">7:00PM EDT</span>
    <script src="//cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js"></script>
    <script
      var els = document.getElementsByClassName('localtime');
      for (var i = 0, l = els.length; i < l; i++)
        els[i].innerHTML = 
          Date.parse(els[i].innerHTML).toLocaleString();
    </script>
  </body>
</html>

如何在时间旁边显示用户特定的时区缩写,以便用户知道时间基于他们的时区?

【问题讨论】:

    标签: javascript timezone datejs


    【解决方案1】:

    一些事情:

    • date.js has been abandoned。您可能应该避免使用它。
    • 时区缩写不明确。见this list
    • 例如,如果您输出为“CST” - 这可能意味着“中部标准时间”、“中国标准时间”或“古巴标准时间”。
    • 据我所知,没有任何库可以为您提供当地时区的缩写。
    • 通常只使用Date().toString() 就可以看到一些区域信息,但它高度依赖于浏览器。它可能以缩写形式出现,或以本地化全名或时区 ID 的形式出现,或者根本不出现。
    • 也许你最好只显示偏移量。那至少是标准化的。您可以使用原始 JavaScript 来实现这一点,或者使用 moment.js 更轻松。
    • 在您提供的代码中,没有输入日期,因此您很难将其锁定到特定时区。您假设“EDT”是所有浏览器中的日期解析器都可以识别的东西,但事实并非如此。
    • 最好的方法是从一个确切的时刻(UTC 或偏移量)开始,然后将其呈现为正确的格式。例如,(使用 moment.js)

      var m = moment("2013-08-06T19:00:00-04:00"); // this is 7PM EDT
      var s = m.format("HH:mm ([UTC]ZZ)");  // example: "16:00 (UTC-0700)"
      

    【讨论】:

      【解决方案2】:

      可在此处获取 DateJS 核心代码的更新版本(并将在未来修复未解决的错误):

      https://github.com/abritinthebay/datejs/

      但是听起来您只是在寻找 DateJS 的格式或 toString 方法。

      例如:

      var tmp = Date.parse("2013-09-05T22:40:00Z");
      var time = tmp.format("g:i A T");
      

      这会留下字符串“3:40 PM PDT”

      这不依赖于内部浏览器问题,因为 DateJS 基于日期的偏移量执行查找(每个浏览器都不会改变)。

      【讨论】:

        【解决方案3】:

        尝试时刻时区, http://momentjs.com/timezone/docs/#/zone-object/abbr/

        <script>
           moment().tz("America/Los_Angeles").zoneAbbr();
        </script>
        

        请注意包括 moment.js、moment-timezone.js 和 moment-timezone-data.js

        【讨论】:

          【解决方案4】:

          bigeasy 的Timezone 似乎是一种为您提供时区缩写的解决方案,尽管@matt-johnson 暗示了缩写are not standardized

          使用 Node.js 试用时区的示例(遵循walk-through):

          $ npm install timezone
          $ node
          > tz = require('timezone');
          [Function]
          > us = tz(require("timezone/America"));
          [Function]
          > us(us("2013-12-11 03:00"), "America/Detroit", "%Z")
          'EST'
          > us(us("2013-12-11 03:00"), "America/Los_Angeles", "%Z")
          'PST'
          > us(us("2013-10-11 03:00"), "America/Los_Angeles", "%Z")
          'PDT'
          

          Moment.js 有一个 entry point "hook" for time zone abbreviations,但据我所知,还没有一个库可以利用这一点。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-15
            • 2015-05-19
            • 1970-01-01
            • 2021-05-23
            • 2014-08-02
            • 2020-09-13
            • 2010-12-29
            相关资源
            最近更新 更多