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

如何在Javascript中获取浏览器的时区字符串?,javascript,timezone,Javascript,Timezone,我想在我的网页上显示该项目的全名。例如: Eastern Standard Time (North America) Pacific Daylight Time (North America) West Africa Time 如何在Javascript中实现这一点? 我见过这样的解决方案:美国/纽约。但这并不是我真正想要的。一种方法是使用momentJs库 首先在页面中安装/导入momentjs。有了它,您可以获得UTC时间。 现在,从UTC,您可以使用momentJS时区转换为客户端的本

我想在我的网页上显示该项目的全名。例如:

Eastern Standard Time (North America)
Pacific Daylight Time (North America)
West Africa Time
如何在Javascript中实现这一点?
我见过这样的解决方案:
美国/纽约
。但这并不是我真正想要的。

一种方法是使用momentJs库

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


更新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>

var计数器=1;
var interval=setInterval(函数(){
document.getElementById('testArea')。innerHTML=counter+“:”+jstz.determine().name()+“
”; 计数器++; }, 2000);
存储库在这里下载并试用 下载存储库后,将其解压缩并进入utilities文件夹并打开index.html

:

显示示例演示的页面如下所示:


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

在大多数完全支持的现代浏览器和其他环境中,最好将其提取如下:

// Get a specific point in time (here, the current date/time):
const d = new Date();

// Get a DateTimeFormat object for the user's current culture (via undefined)
// Ask specifically for the long-form of the time zone name in the options
const dtf = Intl.DateTimeFormat(undefined, {timeZoneName: 'long'});

// Format the date to parts, and pull out the value of the time zone name
const result = dtf.formatToParts(d).find((part) => part.type == 'timeZoneName').value;
例如,在冬季Windows上的Chrome 79浏览器中,它返回“太平洋标准时间”。夏季的相同代码将返回“太平洋夏令时”。如果要反映在一年中某个特定时间生效的时区描述,请在该特定时间创建
Date
对象

在不支持
Intl
API的旧环境中,您可以尝试从
Date.toString
输出中提取部分时区名称,如下所示:

var s = new Date().toString().match(/\((.*)\)/).pop();
Sun Feb 21 2016 22:11:00 GMT-0800 (Pacific Standard Time)
这仅仅是因为
Date
对象上的
toString
函数的输出由实现来定义,并且许多实现恰好在括号中提供时区,如下所示:

var s = new Date().toString().match(/\((.*)\)/).pop();
Sun Feb 21 2016 22:11:00 GMT-0800 (Pacific Standard Time)
如果您要查找通用名称,例如简单的“太平洋时间”-对不起,这不可用。

一行:

new window.Intl.DateTimeFormat().resolvedOptions().timeZone

不幸的是,这个答案并没有真正告诉我需要做什么来解决我的问题。我已经看过那些图书馆了。我看不到任何关于如何获取我要查找的字符串的清晰解释。@SaqibAli现在检查一下这应该可以为您解决问题。jsTimeZoneDetect可以猜出一个类似于
美国/纽约
的区域id,现在矩时区也可以这样做。但OP明确表示这不是他想要的。很有趣。当我做
newdate().toString()
时,我得到
2016年2月22日周一01:25:11 GMT-0500(美国东部时间)
。我在MacOSXYosemite上使用Chrome48。我可以编写一个函数,它采用最常见的时间字符串格式,从中提取字符串并显示出来,对吗?这不会是100%。但我可能会处理大多数情况。祝你好运。边缘案件的数量之多将很难处理。还要考虑数据随时间而变化,并且每种语言都有所不同。你懂汉语、俄语和阿拉伯语吗?:)我的观点是——没有一致可靠的解决方案。你的例子很好地证明了这一点。如果你愿意分享关于你的用例的更多细节(包括目的和你在后端运行的平台),我也许可以建议一种替代方法。Matt。我正在构建一个应用程序,其中用户必须通过从日期选择器中选择日期来设置截止日期。如果选择2月25日,则日期/时间2016年2月25日00:00将转换为UTC并发送到后端数据库。此日期将在其他用户的本地化时间内显示给他们。因此,如果华盛顿特区有人选择2016年6月1日。洛杉矶的一位用户将看到他们选择了5月31日21:00。当用户选择日期时,我希望他们能够很好地理解,他们是在自己的时区选择日期的。这就是我最初的问题。实现这一点的最佳方式是什么?你可以说“在你的本地时区”。有时最简单的解决方案是最好的。或者只是通过一个日期对象将输入返回,并在文本中显示toString结果,不管它是什么。