2014-09-29 23 views
1

我在週一晚上聽到我的消息!任何人都可以請幫我理解下面的問題? 我的瀏覽器上有以下字符串01-09-2014(這是當地時間),我想將其轉換爲UTC,以便我可以將其保存回服務器。 下面是我在做什麼:在momentjs中創建UTC時間正在返回奇怪的結果

var localDate = moment("01-09-2014", "DD-MM-YYYY"); 
    var utcDate = localDate.utc(); 
    console.log("Local Date " + localDate.toDate() + " UTC Date " + utcDate.toDate()); 

奇怪的是,最後一行輸出:

Local Date Mon Sep 01 2014 00:00:00 GMT+0200 (Romance Daylight Time) UTC Date Mon Sep 01 2014 00:00:00 GMT+0200 (Romance Daylight Time) 

問題

  • 爲什麼UTC日期看起來完全一樣的當地時間(我預計當地時間比UTC提前2小時,因爲我在GMT + 2區)?
  • 爲什麼UTC日期有GMT + 0200?我希望UTC日期有GMT + 000

你能幫我解決這兩個問題嗎?

回答

3

Thoug我不知道......但我認爲它應該是:

var utcDate = localDate.utc().format() 

參見:

http://momentjs.com/docs/#/parsing/utc/

修訂

小提琴:

http://jsfiddle.net/qhk9tnLr/2/

JS:

console.log("Local Date: " + moment("01-09-2014", "DD-MM-YYYY").toDate()); 
console.log("UTC Date: " + moment("01-09-2014", "DD-MM-YYYY").utc().format("ddd MMM DD YYYY HH:mm:ss zZZ")); 

輸出:

Local Date: Mon Sep 01 2014 00:00:00 GMT+0200 
UTC Date: Sun Aug 31 2014 22:00:00 UTC+0000 

結論:

toDate()會給本地時間 - 獲得UTC使用utc().format()

+0

感謝您的回答,格式輸出一個字符串,我想要的是一個JavaScript日期對象。更糟的是,格式返回的日期字符串是一天後8-) – GETah 2014-09-29 20:06:30

+0

是的 - 但你會得到所需的價值與它...看到我更新的答案:) – conceptdeluxe 2014-09-29 20:07:40

+2

@GETah - 一個JS的日期對象是*永遠*將使用本地計算機的時區。只要你調用'toDate()',你就可以取消當前'utc'函數的效果。無論如何,您無法將「Date」對象傳遞給服務器。最終,你必須將它格式化爲一個字符串,所以你應該使用片刻的'format'或'toISOString'函數。 – 2014-09-29 20:07:55