gpt4 book ai didi

javascript - 使用 moment.js 检测当前用户时区的 ID

转载 作者:行者123 更新时间:2023-12-03 03:50:36 31 4
gpt4 key购买 nike

我正在寻找一种检测浏览器时区 ID 的方法(如 Olson tables 中定义),但我不关心确切的 ID,我只需要工作相同的时区 ID作为用户的位置(例如,如果用户在巴黎,则“欧洲/罗马”就可以)。

我对当前偏移量不感兴趣,我确实需要时区,以便我可以将其发送到服务器以计算其他日期(服务器也有 Olson 表)。

理论上,因为我已经使用 Moment.js timezone library并且已经包含了 Olson 表,我不需要任何其他东西,但我没有找到任何 API 来进行检测。我不知道它是否隐藏在某个地方或者是否有人已经写了。问题之一是当前的时区插件似乎将其数据保密。

不'想要一个基于奥尔森表的另一个副本或摘录(我必须维护)的集成的解决方案,我知道有一些库复制它们,我想使用 Moment.js 中已有的内容。

最佳答案

我制作了一个小脚本来进行该检测。它首先注册可用时区的 id,然后调用 matches 函数测试当前时间以及 4 和 8 个月后时间的所有时区 id(以过滤掉时区)不同的日光规则)和五年前。

这里是:

<script src="moment-with-langs.min.js"></script>
<script src="moment-timezone.min.js"></script>
<script src="moment-timezone-data.js"></script>
<script>
var tzdetect = {
names: moment.tz.names(),
matches: function(base){
var results = [], now = Date.now(), makekey = function(id){
return [0, 4, 8, -5*12, 4-5*12, 8-5*12, 4-2*12, 8-2*12].map(function(months){
var m = moment(now + months*30*24*60*60*1000);
if (id) m.tz(id);
return m.format("DDHHmm");
}).join(' ');
}, lockey = makekey(base);
tzdetect.names.forEach(function(id){
if (makekey(id)===lockey) results.push(id);
});
return results;
}
};
</script>

如果您只想要一个时区 ID,只需使用

var tzid = tzdetect.matches()[0];

Demonstration

GitHub 存储库:https://github.com/Canop/tzdetect.js

更新:此处显示的代码与最新版本的 moment.js 不兼容。请引用GitHub repository获取维护(免费使用)的代码。

2017 年更新: moment.js 中现在有一个 API 可以猜测时区。这可能是目前最好的解决方案。

关于javascript - 使用 moment.js 检测当前用户时区的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19420582/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com