9

ISO-8601日付を標準に出力したいYYYY-MM-DDTHH:mm:ss.sssZので、次のコード行を使用しましたが、予期しない出力が得られます

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 オブジェクトにタイム オフセットを追加する必要がありますか?

4

2 に答える 2

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()

この回答の以前のバージョンでは、オフセットが減算ではなく誤って追加されていました。

于 2012-11-30T13:50:35.530 に答える