2012-11-30 30 views
4

我想打印的日期ISO-8601標準日期:YYYY-MM-DDTHH:mm:ss.sssZ所以我用下面的代碼行,但我得到意想不到的輸出的JavaScript Date.toJSON()產生具有錯誤的小時和分鐘

var date = new Date(2012, 10, 30, 6, 51); 
print('UTC Format: '+date.toGMTString()); 
print('toString() method: '+date.toString()); 
print('toJSON() method: '+date.toJSON());//print hours and minutes incorrectly 
print('to UTCString() method: ' + date.toUTCString()); 

相應的輸出是

UTC Format: Fri, 30 Nov 2012 01:21:00 GMT 
toString() method: Fri Nov 30 2012 06:51:00 GMT+0530 (India Standard Time) 
toJSON() method: 2012-11-30T01:21:00.000Z 
to UTCString() method: Fri, 30 Nov 2012 01:21:00 GMT 

的的toJSON()方法打印小時和分鐘,但不正確的toString()打印它正確,我想知道是什麼原因爲何。 我是否必須爲Date對象添加時間偏移量,如果是,那麼該如何?

+0

哪一部分是錯誤的? – xiaoyi

+0

toJSON部分減去我的小時和分鐘5:30小時,這是印度的格林威治標準時間格林威治標準時間,這不是印度的格林尼治標準時間格林威治標準時間 –

+0

。 – xiaoyi

回答

8

date.toJSON()將UTC-Date打印爲格式爲json-date的字符串。

如果您希望打印本地時間,則必須使用getTimezoneOffset(),它將以分鐘爲單位返回偏移量。你有這個值轉換成秒,並添加到您的日期戳:

var date = new Date(2012, 10, 30, 6, 51); 
new Date(date.getTime() + (date.getTimezoneOffset() * 60000)).toJSON() 
+0

如何解決我的問題,例如我定義了var date = new Date(2012,10,30,6,51);我如何使用defaultTimezoneOffset方法添加剩餘的5.30小時? –

+0

編輯我的回答 – hereandnow78

+0

這給了我錯誤的結果。 Sushil Dravekar的答案給出了正確的結果。 – mvermand

18
var date = new Date(); 
console.log(date.toJSON(), new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toJSON()); 
+5

這應該是正確的答案! – abimelex

+0

@abimelex你和其他人是對的,我糾正了我的答案 – hereandnow78