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

35
var date = new Date();
console.log(date.toJSON(), new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toJSON());
于 2014-08-29T17:06:50.270 回答
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 回答