2010-09-23 35 views
5

我有一個webservice,例如返回一個DateTime對象:DepartureDate。 我使用Ajax來獲取這一點,在我看來,我的JSON日期字符串轉換爲JavaScript日期對象來使用此功能:轉換沒有時區的JSON日期

function convertToDate(jsonDate) { 
    return eval("new " + jsonDate.substring(1, jsonDate.length - 1)); 
} 

的問題是,new Date()需要考慮到客戶計算機上的本地時間,所以不同國家的客戶會得到不同的日期。我想獲取從web服務返回的確切日期。 有沒有簡單的方法來完成這個?

+0

變量「jsonDate」 – 2010-09-23 17:54:19

+0

的價值可能是什麼,例如「/日期(1285321800000)/」 – knepe 2010-09-23 18:01:37

回答

6

的問題是,new Date()發生在本地時間客戶端計算機上的考慮

都能跟得上。使用時間戳記構造函數創建新的Date需要UTC時間戳記。

例如我的機器上使用UTC + 1:

new Date(0) // Thu Jan 01 1970 01:00:00 GMT+0100 (CET) 

OK,默認toString顯示此日期爲01:00:00這看起來錯的,但實際上是在正確的時間。 UTC + 1的01:00:00爲UTC的00:00:00,即時間戳0所描述的時刻。

如果你想顯示你從UTC時間戳創建日期,使用date.toUTCString()或獲取和使用getUTCFullYear()getUTCMonth()

請,雖然沒有eval格式化日期的consistuent部分。

new Date(parseInt(jsonDate.slice(6, -1), 10)) 
+0

謝謝你的偉大的回答bobince。我不擅長日期和事情,所以我可能在這裏不瞭解任何事情,但是我做了你的建議,結果仍然是一樣的。如果我在我的機器上更改我的時區,則時間會發生變化(我希望它們保持不變,不管您在什麼時區,都應遵循AST時區。) – knepe 2010-09-23 20:28:16

+0

「toString()」顯示的*時間*更改反映你的時區,但這並不意味着日期有任何不同。 '新日期(1285321800000).getUTCHours()'總是'9',不管你的時區。堅持'getUTC ...'和'setUTC ...'函數,日期將按照您的期望行事。 – bobince 2010-09-23 22:56:56