簡體   English   中英

獲取JS中的客戶端時區(不是GMT抵消金額)

[英]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端有時區。

這個問題的答案開始,我發現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);
    }
});

如果你只想要偏移,那么這就簡單得多了

var curdate = new Date();

var offset = curdate.getTimezoneOffset();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM