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

Rex*_*x M 20 javascript timezone datetime

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

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

因此,我现在被卡住了.

roj*_*ojo 32

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

在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;
Run Code Online (Sandbox Code Playgroud)

示例结果:

  • 火狐: TZ = "EDT"

  • 苹果浏览器: TZ = "EDT"

  • 铬: TZ = "EDT"

  • IE: TZ = "EDT"

  • 歌剧: TZ = "GMT-0400"

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


bob*_*nce 7

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

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


归档时间:

查看次数:

20389 次

最近记录:

9 年,6 月 前