[英]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.