2014-03-04 43 views
0

我面對很奇怪的問題請看下面的兩個例子。getUTCDate()函數問題在不同的時區

我的開發環境時區:GMT + 0500

當我使用以下功能:

var d = new Date("Tue Mar 18 2014 00:00:00 GMT+0500"); 
var n = d.getUTCDate(); 

N = 17這是正確的(返回月份的UTC一天一個特定的,當地時間,日期和時間),並且在我的時區內一切正常。

我的客戶時區:GMT + 0000

var d = new Date("Tue Mar 18 2014 00:00:00 GMT+0000"); 
var n = d.getUTCDate(); 

N = 18這是錯誤的

任何一個把一些光,爲什麼會這樣?如何解決這個問題?

任何幫助,將不勝感激。

+0

這個答案對我來說看起來是正確的。您輸入UTC的日期,所以UTC日期應該是同一天。 – Barmar

+1

你的日期字符串是不同的;爲什麼結果不一樣? – Pointy

+1

將時區包含在日期字符串中時,計算機的時區無關緊要。 – Barmar

回答

2

N = 18這是錯誤的

不,這不是。您提供了GMT + 0000,與GMT或UTC相同。所以從getUTCDate的結果當然是你通過的日期

我想你是因爲你如何措辭此困惑:

我的開發環境時區:GMT + 0500

我客戶時區:GMT + 0000

時區不是數字偏移量。一個時區可以有一個偏移量,或者多個偏移量,並且包括偏移量如何隨時間變化的歷史。請參見the timezone tag wiki中的「時區!=偏移」。

所以這些可能是當前補償您和您的客戶,但這並不一定意味着他們總是會在相同的偏移量。如果你的客戶在英國,那麼他們現在是+0000,但他們很快會在+0100。 See here for details

0

您的第一次約會是明確地建造一個時區,導致UTC日期爲17.在時區的第十八個午夜時分5小時前面 UTC(GMT),它仍然是在倫敦的第17。你的第二個日期是用明確的UTC時區構造的。在你第二次約會的時間,換句話說,就是在第一個時區早上5點。