繁体   English   中英

获取JS中的客户端时区(不是GMT抵消金额)

[英]Get client timezone (not GMT offset amount) in JS

我需要在JS中确定客户端时区(例如CET,GMT,EST)。 获得偏移很简单,但没有确定TZ所需的所有信息,至少不容易。 我感觉有可能使用偏移的组合,无论是否正在使用DST等等,但我希望其他人已经完成了这项工作,特别是考虑到处理时间时的奇怪异常。

这个问题很相似,但问题和答案都是基于(错误的)假设,每个浏览器的DateString格式都包含时区的名称 - 它不是。 这是一个实现细节。

因此,我现在被卡住了。

你可以从日期对象的toString()方法中删除它。 new Date.toString()会在Firefox,Safari和Chrome中产生类似于Wed Sep 19 2012 10:04:32 GMT-0400 (Eastern Daylight Time) 您想要的数据是 - 括号内的大写字母。 所需要的只是刮掉它们。

对于Internet Explorer, toString()的结果已包含EDT

在Opera的情况下,您唯一的选择是结算GMT-0400或类似。 toString()方法中没有任何可刮擦的东西。

var now = new Date().toString();
var TZ = now.indexOf('(') > -1 ?
now.match(/\([^\)]+\)/)[0].match(/[A-Z]/g).join('') :
now.match(/[A-Z]{3,4}/)[0];
if (TZ == "GMT" && /(GMT\W*\d{4})/.test(now)) TZ = RegExp.$1;

示例结果:

  • Firefox: TZ = "EDT"

  • Safari: TZ = "EDT"

  • Chrome: TZ = "EDT"

  • IE: TZ = "EDT"

  • 歌剧: TZ = "GMT-0400"

似乎与我所尝试的所有随机的亚洲和欧洲时区一样好,返回关岛的WPST(西太平洋标准时间),吉隆坡的MPST(马来半岛标准时间)等; 并且平稳地降级为GMT + 0X00表示法,其中浏览器不提供名称(例如,珀斯)。

看到这个问题 在一般情况下这是不可行的,但是从可能情况的候选名单中选择默认时区,你可以做出不错的猜测。

当您猜错时,允许用户覆盖它。

我要做的是确定标准和日光偏移(这听起来像你已经知道的。如果没有,你可以从Josh Fraser的参考资料http://onlineaspect.com/examples/timezone/detect_timezone.js开始)。 一旦知道标准偏差和日光偏移,就可以始终在服务器端确定时区。 然后可以使用Ajax调用,以便不需要页面刷新。 最终结果是你现在在JavaScript端有时区。

这个问题的答案开始,我发现IP API也为您提供了时区 - 非常方便:

$.ajax({
    url: "http://ip-api.com/json",
    type: 'GET',
    success: function(json) {
        console.log("Timezone: " + json.timezone);
    },
    error: function(err) {
        console.log("Request failed, error= " + err);
    }
});

如果你只想要偏移,那么这就简单得多了

var curdate = new Date();

var offset = curdate.getTimezoneOffset();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM