2014-02-26 53 views
2

考慮下面的代碼:Date.getUTCHours() - 不同的輸出在Chrome,Firefox和Internet Explorer

var date = new Date("2014-02-26T15:52:30"); 
date.getUTCHours(); 
// Outputs 
// Chrome: 15 
// Firefox: 18 
// IE: 18 

我不知道我應該使用哪個日期的方法。 Date.getHours在FF和IE中返回正確的小時數,但在Chrome中不正確。 Date.getUTCHours()向我顯示正確的日期,但在IE和FF中都不正確。無論如何有什麼區別? UTC的日期應該是什麼?

我不知道是否有CrossBrowser原生解決方案......我不想用這樣一個簡單的東西庫。

+0

也許你應該指定你的日期字符串時區?根據標準,不知道它應該如何解釋。 – aknuds1

+0

@ aknuds1如何指定時區?這是日期規範的一部分嗎?那麼,我無法改變日期字符串,因爲這是我從服務器收到的格式。 – darksoulsong

+0

如果您希望服務器的時區爲-3小時,則應在日期字符串後面加上-03:00。 'new Date('2014-02-26T15:52:30-03:00')。getUTCHours()'。 – aknuds1

回答

6

Chrome會翻譯您的日期var date = new Date("2014-02-26T15:52:30");var date = new Date("2014-02-26T15:52:30Z");相同(請注意z,表示utc時區)。

FF和IE解釋var date = new Date("2014-02-26T15:52:30");爲在當前用戶的時區是在我的情況,這將是var date = new Date("2014-02-26T15:52:30-05:00");(GMT-0500)

我強烈建議你還是堅持使用UTC爲你的計算需要並執行當你想要顯示日期給用戶的時區轉換。時區可以成爲一個真正的痛苦。

+0

這就是我想說的,儘管[ECMAScript標準](http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15)表示缺席的時區應該是被視爲'Z',所以奇怪的是FF和IE做不同。 – aknuds1

+0

就像老闆。我無法在任何地方找到該信息。我會簡單地在字符串的末尾添加「Z」來處理這個問題。 – darksoulsong

+0

上帝該死的瀏覽器......感謝:D我也是這樣做的,添加了Z以確保它們都將它當作UTC – Darren

3

的問題不在於getUTCHours()與您dateString(2014-02-26T15:52:30)。

按照ISO8601,最好是要麼

var date = new Date("2014-02-26T15:52:30Z"); 

var date = new Date("2014-02-26T15:52:30+00:00"); 

這確保共同所有的瀏覽器之一。

在你的情況下,最好是有

var dateString = "2014-02-26T15:52:30" + "Z"; 
var date = new Date(dateString); 
date.getUTCHours(); 
相關問題