Javascript 显示带有Date.js的时区缩写

Javascript 显示带有Date.js的时区缩写,javascript,timezone,datejs,Javascript,Timezone,Datejs,我有一个脚本,可以读取用户时区并根据用户显示时间。如何显示时区缩写 我有一个游戏网站,我们在帖子上写着“我们将在7:00现场玩”。来自世界各地的用户阅读我们的博客,并希望观看直播。我有下面的脚本,它应该读取用户的时区,并根据用户居住的位置显示时间 <!DOCTYPE html> <html lang="en"> <head> <title>Localtime</title> </head> <bod

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

我有一个游戏网站,我们在帖子上写着“我们将在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>

本地时间
我们将在美国东部夏令时晚上7点进行现场直播
有几件事:

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


更新版本的DateJS核心代码(并将在将来修复开放的bug)可在以下位置获得:

不过,听起来您只是在寻找DateJS的格式或toString方法

例如:

var tmp = Date.parse("2013-09-05T22:40:00Z");
var time = tmp.format("g:i A T");
这将留下字符串“PDT下午3:40”的时间

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

bigeasy似乎是一种解决方案,可以为您提供时区缩写,尽管@matt johnson,缩写也暗示了这一点

使用Node.js尝试时区的示例(如下所示):

$npm安装时区
$node
>tz=要求(“时区”);
[功能]
>us=tz(要求(“时区/美国”);
[功能]
>美国(美国(“2013-12-11 03:00”),“美国/底特律”,“Z”)
“EST”
>美国(美国(“2013-12-11 03:00”),“美国/洛杉矶”,“Z”)
“PST”
>美国(美国(“2013-10-11 03:00”),“美国/洛杉矶”,“Z”)
“PDT”

有一个,但据我所知,还没有一个库可以利用它。

试试片刻时区,


矩().tz(“美国/洛杉矶”).ZoneAbr();
请注意,包括moment.js、moment-timezone.js和moment-timezone-data.js

var tmp = Date.parse("2013-09-05T22:40:00Z");
var time = tmp.format("g:i A T");
<script>
   moment().tz("America/Los_Angeles").zoneAbbr();
</script>