2016-10-05 22 views
1

的時區我有一個JavaScript代碼段後,如下圖所示:Chrome瀏覽器不能正確得到區名稱更改計算機

$(document).ready(function() {  
    var day1 = new Date(); 
}); 

現在我打開瀏覽器(在這種情況下,我使用Firefox)和當前時區我的電腦是UTC +10:00霍巴特。然後,我在調試模式下查看JavaScript變量的day 1,它顯示如下圖所示的值。 enter image description here

UTC的時區名稱+ 10:00霍巴特塔斯馬尼亞島標準時間。 FF會得到正確的名字,正如我的預期一樣。

接下來,我將昌我的電腦UTC + 10時區:00堪培拉,墨爾本,悉尼FF瀏覽器被打開。然後我再次按下Ctrl + F5刷新FF瀏覽器並在調試模式下查看day1的值。

enter image description here

正如你所看到的,FF更新新的正確的區名稱爲澳大利亞東部標準時間。它也按我的預期工作。

MS Edge和IE的工作方式與FF相同。

但是,Chrome以不同的方式工作。

enter image description here

新的時區名稱的Chrome返回到我是本地夏令時間,不是澳大利亞東部標準時間爲我的預期和其他瀏覽器(FF,MS邊緣,IE)一樣。

爲什麼不返回「AUS東部標準時間」的名稱?

有什麼辦法可以解決這種情況下的Chrome?

回答

3

不幸的是,時區名稱的實現並不標準化。 ECMAScript規範允許它成爲供應商想要的任何東西。在瀏覽器中,甚至跨瀏覽器的不同版本,以及跨操作系統,它都沒有什麼不同。

ECMA-262 (5.1) Section 15.9.5.2(重點煤礦)

Date.prototype.toString()

此函數返回一個字符串值。 字符串的內容取決於具體實現,但旨在用方便的人類可讀形式表示當前時區中的日期。

如果你正在嘗試做的是檢測用戶的時區,有一個檢索時區名稱的新標準,爲IANA時區標識符(例如,Australia/Sydney),你可以做像這樣:

Intl.DateTimeFormat().resolvedOptions().timeZone 

但是,並非所有的瀏覽器都已經實現了這一點。有些庫可以猜到它,which you can read about here

+0

感謝您的信息,馬特。我想我應該直接聯繫Chrome開發人員並與他們討論這個問題,以找到解決方案或解決方案。我的客戶現在正在經歷這個問題,而且您知道,他們更喜歡使用Chrome而不是其他瀏覽器。所以我必須解決它。 =)) –

+1

@ PhucNguyen - 當馬特說「*時區名稱的實現不規範*」時,他的意思是無處不在,而不僅僅是ECMAScript。雖然有[* de facto *](https://www.google.com.au/search?client=safari&rls=zh-CN&q=define+de+facto&ie=UTF-8&oe=),但有各種命名方案,並且沒有標準。 UTF-8&gfe_rd = cr&ei = Otb2V5bnO6rM8gfQwYTQAQ)標準,如[* IANA *](https://www.iana.org/time-zones)和[* military *](https://en.wikipedia.org/wiki/List_of_military_time_zones )代號。 – RobG

+0

@RobG:非常感謝您的詳細解釋。 :d。我聯繫了Chrome開發人員,他們現在正在審查我的問題。他們會給我一個反饋,問題是一個錯誤或不晚。順便說一句,我認爲應該有一個解決方案來獲得我預期的時區名稱,如帖子所述:http://stackoverflow.com/questions/18246547/get-name-of-time-zone/18252251#18252251 –

相關問題