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

时间:2010-05-24 13:55:39

标签: javascript datetime timezone

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

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

所以,我现在被卡住了。

5 个答案:

答案 0 :(得分:32)

您可以从日期对象的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"

  • Opera:TZ = "GMT-0400"

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

this answer开始到另一个问题,我发现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);
    }
});

答案 4 :(得分:-4)

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

var curdate = new Date();

var offset = curdate.getTimezoneOffset();