다음은 정말 깔끔하고 간단합니다 (나는 그렇게 생각합니다 :)) 복제 할 날짜 조작이 필요하지 않으며 toJSON과 같은 브라우저의 기본 기능을 오버로드 할 필요가 없습니다 (참조 : JSON을 JSON 문자열로 지정하고 시간대를 유지하는 방법 문자열 , 법정 Shawson).
JSON.stringify에 교체 기능을 전달하여 마음의 내용에 맞게 문자열을 지정하십시오 !!! 이렇게하면 시간 및 분 차이 또는 기타 조작을 수행 할 필요가 없습니다.
중간 결과를보기 위해 console.logs에 넣었으므로 진행 상황과 재귀가 어떻게 작동하는지 명확하게 알 수 있습니다. 그것은 주목할만한 가치가 있음을 보여줍니다 : 대체자에 대한 값 매개 변수는 이미 ISO 날짜 형식으로 변환되었습니다 :). 원본 데이터로 작업하려면 this [key]를 사용하십시오.
var replacer = function(key, value)
{
var returnVal = value;
if(this[key] instanceof Date)
{
console.log("replacer called with key - ", key, " value - ", value, this[key]);
returnVal = this[key].toString();
/* Above line does not strictly speaking clone the date as in the cloned object
* it is a string in same format as the original but not a Date object. I tried
* multiple things but was unable to cause a Date object being created in the
* clone.
* Please Heeeeelp someone here!
returnVal = new Date(JSON.parse(JSON.stringify(this[key]))); //OR
returnVal = new Date(this[key]); //OR
returnVal = this[key]; //careful, returning original obj so may have potential side effect
*/
}
console.log("returning value: ", returnVal);
/* if undefined is returned, the key is not at all added to the new object(i.e. clone),
* so return null. null !== undefined but both are falsy and can be used as such*/
return this[key] === undefined ? null : returnVal;
};
ab = {prop1: "p1", prop2: [1, "str2", {p1: "p1inner", p2: undefined, p3: null, p4date: new Date()}]};
var abstr = JSON.stringify(ab, replacer);
var abcloned = JSON.parse(abstr);
console.log("ab is: ", ab);
console.log("abcloned is: ", abcloned);
/* abcloned is:
* {
"prop1": "p1",
"prop2": [
1,
"str2",
{
"p1": "p1inner",
"p2": null,
"p3": null,
"p4date": "Tue Jun 11 2019 18:47:50 GMT+0530 (India Standard Time)"
}
]
}
Note p4date is string not Date object but format and timezone are completely preserved.
*/
2009-09-28T10:00:00Z
시간에 같은 순간을 나타내지 않는 등Mon Sep 28 10:00:00 UTC+0200 2009
.Z
에서 ISO 8601 날짜는 UTC를 의미하며, UTC 10시 방향입니다 시간에 다른 순간 0200에서 10시 방향. 날짜가 올바른 시간대로 직렬화되기를 바라는 것이 하나이지만, 명확하고 객관적으로 잘못된 표현으로 직렬화하는 데 도움을 요청하는 것 입니다.