使用Date.js显示Timezone缩写

时间:2013-08-06 19:24:04

标签: javascript timezone datejs

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

我有一个游戏网站,在帖子上我们写道“我们将在7点开始现场直播”。来自世界各地的用户阅读我们的博客,并希望直播。我有以下脚本应该读取用户时区,并根据用户所在的位置显示时间。

<!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>

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

4 个答案:

答案 0 :(得分:3)

一些事情:

  • date.js has been abandoned。你应该避免使用它。
  • 时区缩写不明确。见this list
  • 例如,如果输出为“CST” - 可能表示“中央标准时间”,“中国标准时间”或“古巴标准时间”。
  • 据我所知,没有任何图书馆可以提供本地时区的缩写。
  • 您通常只能看到Date().toString()的某些区域信息,但它高度依赖于浏览器。它可以作为缩写,或作为时区的本地化全名或id,或者根本不作为。
  • 也许你会更好地显示偏移量。这将至少标准化。您可以使用原始JavaScript执行此操作,甚至可以使用moment.js更轻松。
  • 在您提供的代码中,没有输入日期,因此您将很难将其锁定到特定时区。您假设“EDT”是所有浏览器中的日期解析器都可以识别的东西,但事实并非如此。
  • 最好的方法是从精确时刻开始(无论是UTC还是偏移),然后将其渲染为正确的格式。例如,(with 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)"
    

答案 1 :(得分: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 PDT”

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

答案 2 :(得分:0)

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

使用Node.js尝试Timezone的示例(在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,但据我所知,还没有一个图书馆可以利用这个。

答案 3 :(得分:0)

尝试时刻时区, 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