如何在Javascript中获取浏览器的时区字符串?

时间:2016-02-22 05:36:19

标签: javascript timezone

我想在我的webpapge上显示user's Timezone的全名。例如:

Eastern Standard Time (North America)
Pacific Daylight Time (North America)
West Africa Time

我如何在Javascript中执行此操作? 我见过这样的解决方案:America/New_York。但那并不是我真正想要的。

3 个答案:

答案 0 :(得分:7)

一个班轮:

Processing script...
Variable 'csf' was declared with 'series[integer]' type. Cannot assign it expression of type 'series[float]'.

答案 1 :(得分:4)

您似乎要求在当前时间点以用户当前语言描述用户当前时区的可读描述。

从跨浏览器,完全支持和完全实现的解决方案的角度来看,这个问题不容易解决。不管怎样,还没有。

您可以尝试提取部分时区名称,如下所示:

var s = new Date().toString().match(/\((.*)\)/).pop();

冬季在Windows上的Chrome 48浏览器中,它会返回“太平洋标准时间”。夏季相同的代码将返回“太平洋夏令时”。如果要反映在一年中特定时间生效的时区的描述,请在该特定时间创建Date对象。

这只能起作用,因为toString对象上的Date函数的输出由实现来定义,而Chrome恰好在括号中提供时区,如下所示:< / p>

Sun Feb 21 2016 22:11:00 GMT-0800 (Pacific Standard Time)

所以 - 只要浏览器执行此操作(无法保证),您就可以获得某些结果。实际上很可能会有很多浏览器没有返回这样的字符串。

如果您正在寻找通用名称,例如简单的“太平洋时间” - 对不起,那是不可用的。

唯一的另一种方法是尝试使用jsTimeZoneDetect或使用moment-timezone检测时区标识符,然后从CLDR中提取数据以呈现时区名称。不幸的是,目前没有包含时区名称数据的JavaScript的CLDR库,因为数据往往非常大,并且会对浏览器造成相当大的负担。

换句话说 - 从纯粹的JavaScript角度来看,目前你无法可靠而持续地做到这一点。

答案 2 :(得分:0)

实现此目的的一种方法是使用momentJs库。

http://momentjs.com/

首先在您的页面中安装/导入momentjs。有了这个你可以得到UTC的时间。 现在,从UTC开始,您可以使用momentJS时区转换为客户端的本地时间或任何其他时区。

http://momentjs.com/timezone/

更新2

抱歉,上面的库暂时没有检测到时区。

我用过它,似乎对我有用。

<body>
<div id="testArea"></div>
<script type="text/javascript">
        var counter = 1;
        var interval = setInterval(function () {
            document.getElementById('testArea').innerHTML = counter + ": " + jstz.determine().name() + "<br/>";
            counter++;
        }, 2000);
</script>

</body>

存储库在这里下载并尝试 下载存储库后,将其解压缩并进入实用程序文件夹并打开index.html。

https://bitbucket.org/pellepim/jstimezonedetect/downloads

显示示例演示的页面位于:

http://pellepim.bitbucket.org/jstz/

相关问题