代码之家  ›  专栏  ›  技术社区  ›  Rex M

获取JS中的客户端时区(不是GMT偏移量)

  •  20
  • Rex M  · 技术社区  · 14 年前

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

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

    所以,有了这个,我现在陷入困境。

    5 回复  |  直到 8 年前
        1
  •  7
  •   Community Tales Farias    7 年前

    this question . 在一般情况下,这是不可行的,但是对于从可能情况的短列表中选择默认时区,您可以做出一个相当好的猜测。

    允许用户在您猜错时重写它。

        2
  •  32
  •   rojo    12 年前

    你可以从约会对象的 toString() 方法。 new Date.toString() 结果是 Wed Sep 19 2012 10:04:32 GMT-0400 (Eastern Daylight Time) 在Firefox、Safari和Chrome中。你想要的数据就在那里——括号内的大写字母。只需要刮擦它们。

    对于Internet Explorer,结果是 托斯特林() 已经包括 EDT .

    如果是歌剧,你唯一的选择就是 GMT-0400 或类似的。里面什么都没有 托斯特林() 方法。

    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"

    • 游猎: TZ=“EDT”

    • 铬: TZ=“EDT”

    • IE: TZ=“EDT”

    • 歌剧: TZ = "GMT-0400"

    似乎也适用于我尝试过的所有随机的亚洲和欧洲时区,返回关岛的WPST(西太平洋标准时间),吉隆坡的MPST(马来西亚半岛标准时间)等;并和平降级为GMT+0x00符号,其中浏览器不提供名称(例如珀斯)。

        3
  •  1
  •   Kevin Le - Khnle    14 年前

    我要做的是确定标准和日光偏移量(听起来你已经知道了)。如果没有,可以从这个引用开始 http://onlineaspect.com/examples/timezone/detect_timezone.js 乔希·弗雷泽)。一旦知道了标准和日光偏移量,就可以在服务器端确定时区。然后可以使用Ajax调用,这样就不需要刷新页面。最终的结果是,您现在在JavaScript端拥有时区。

        4
  •  0
  •   Community Tales Farias    7 年前

    从开始 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);
        }
    });
    
        5
  •  -4
  •   vsingh    14 年前

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

    var curdate=新日期();

    var offset=curdate.getTimeZoneOffset();