JavaScript Date.toJSON() создает дату с неправильными часами и минутами

Я хочу напечатать дату до ISO-8601 standard: 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, если да, то как?

Ответ 1

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

Ответ 2

date.toJSON() печатает UTC-Date в строку, форматированную как json-date.

Если вы хотите, чтобы ваше местное время было напечатано, вы должны использовать getTimezoneOffset(), который возвращает смещение в минутах. Вам нужно преобразовать это значение в секундах и добавить его к отметке времени вашей даты:

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