[javascript] JSON Stringify는 UTC로 인해 날짜 시간을 변경합니다.

JavaScript의 날짜 개체는 내가있는 위치 때문에 항상 UTC +2로 표시됩니다. 따라서 이렇게

Mon Sep 28 10:00:00 UTC+0200 2009

문제는 JSON.stringify위 날짜를 다음 으로 변환하는 것입니다.

2009-09-28T08:00:00Z  (notice 2 hours missing i.e. 8 instead of 10)

내가 필요한 것은 날짜와 시간을 존중하는 것이지만 그렇지 않습니다.

2009-09-28T10:00:00Z  (this is how it should be)

기본적으로 나는 이것을 사용합니다.

var jsonData = JSON.stringify(jsonObject);

대체 매개 변수 (stringify의 두 번째 매개 변수)를 전달하려고 시도했지만 문제는 값이 이미 처리되었다는 것입니다.

나는 또한 사용하여 시도 toString()toUTCString()날짜 개체에 있지만 이러한 나도 원하는 걸주지 않는다 ..

누구든지 나를 도울 수 있습니까?



답변

최근에 같은 문제가 발생했습니다. 그리고 다음 코드를 사용하여 해결되었습니다.

x = new Date();
let hoursDiff = x.getHours() - x.getTimezoneOffset() / 60;
let minutesDiff = (x.getHours() - x.getTimezoneOffset()) % 60;
x.setHours(hoursDiff);
x.setMinutes(minutesDiff);


답변

JSON은 Date.prototype.toISOString현지 시간을 나타내지 않는 함수를 사용합니다 . 수정되지 않은 UTC의 시간을 나타냅니다. 날짜 출력을 보면 UTC + 2 시간이라는 것을 알 수 있습니다. 이것이 JSON 문자열이 2 시간 씩 변경되는 이유입니다. 그러나 이것이 여러 시간대에서 동일한 시간이 올바르게 표시되도록 허용하는 경우.


답변

기록을 위해 “2009-09-28T08 : 00 : 00Z”의 마지막 “Z”는 시간이 실제로 UTC임을 의미합니다.

자세한 내용은 http://en.wikipedia.org/wiki/ISO_8601 을 참조하십시오.


답변

여기 또 다른 대답이 있습니다 (개인적으로 더 적절하다고 생각합니다)

var currentDate = new Date();
currentDate = JSON.stringify(currentDate);

// Now currentDate is in a different format... oh gosh what do we do...

currentDate = new Date(JSON.parse(currentDate));

// Now currentDate is back to its original form :)


답변

date.toJSON ()은 UTC-Date를 형식화 된 문자열로 인쇄합니다 (따라서 JSON 형식으로 변환 할 때 오프셋을 추가합니다).

date = new Date();
new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toJSON();


답변

moment.js 를 사용하여 현지 시간으로 형식을 지정할 수 있습니다 .

Date.prototype.toISOString = function () {
    return moment(this).format("YYYY-MM-DDTHH:mm:ss");
};


답변

나는 조금 늦었지만 Prototype을 사용하는 Date의 경우 항상 toJson 함수를 덮어 쓸 수 있습니다.

Date.prototype.toJSON = function(){
    return Util.getDateTimeString(this);
};

제 경우에는 Util.getDateTimeString (this)이 다음과 같은 문자열을 반환합니다. “2017-01-19T00 : 00 : 00Z”