[英]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端有时区。
如果你只想要偏移,那么这就简单得多了
var curdate = new Date();
var offset = curdate.getTimezoneOffset();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.