programing

JSON.stringify() 및 JSON.parse() 사용 시 Date() 관련 문제

firstcheck 2023. 2. 14. 22:34
반응형

JSON.stringify() 및 JSON.parse() 사용 시 Date() 관련 문제

JavaScript를 사용하여 두 시간의 차이를 계산하려고 합니다.기본적인 수학이지만 사용하는 동안 문제가 좀 있는 것 같습니다.JSON.stringify()그리고.JSON.parse().

내가 왜 이런 걸 써야 하는지 궁금하다면JSON.stringify()지금까지 기능하고 있는 것은 로컬 스토리지를 사용하여 클라이언트 측에 데이터를 저장하고 클라이언트가 웹사이트에 다시 접속할 때마다 사용하기 때문입니다(서버에 더 많은 요청을 하는 것보다 더 빠릅니다).그 데이터는 보통 가끔 갱신되기 때문에 (다른 웹사이트에서 API를 통해 데이터를 취득하고 있습니다)그래서 셋업 합니다.data_update다른 데이터와 함께 저장하고 있습니다.

이렇게 하면 로컬 스토리지에서 저장된 데이터를 가져와 두 데이터 간의 차이점을 확인할 수 있습니다.data_update(날짜/시간) 및 체크가 실행된 시간/날짜가 일주일/일/etc를 초과하는지 확인합니다.

그래서 JSON 기능을 사용하고 있습니다.문제는 로컬 스토리지에서 데이터를 구문 분석할 때 날짜가 다른 것 같다는 것입니다.Date()물건.

다음 작업을 수행하려고 합니다.

var x = JSON.parse(JSON.stringify(new Date()));

var y = JSON.parse(this.get_local_storage_data(this.data_cache_key)); // the data object stored on local storage

var q = y.data_update; // this is the variable where the Date() was stored

console.log(Math.floor((x-q)/1000));

상기 내용이 반환됩니다.null그리고 제가 보고 싶을 때Math.floor(x)결과, 반환됩니다.null다시.

그럼 이 상황에서 제가 뭘 할 수 있을까요?이것에 대한 해결 방법이 있나요?

JSON.stringify for a Date의 출력을 보면 다음과 같이 표시됩니다.

JSON.stringify(new Date())

문자열이 생성됩니다.JSON에는 JSON.parse가 자동으로 Date 객체로 되돌아가는 Date 객체의 원시적인 표현은 없습니다.

Date 객체의 생성자는 날짜 문자열을 사용할 수 있으므로 다음 작업을 수행하여 해당 문자열 값을 날짜로 되돌릴 수 있습니다.

var x = new Date(JSON.parse(JSON.stringify(new Date())));

그럼 계산이 되겠네요.

x = new Date(JSON.parse(JSON.stringify(new Date())))
y = new Date(JSON.parse(JSON.stringify(new Date())))
y - x
=> 982
JSON.stringify(new Date())

돌아온다

'2013-10-06T15:32:18.605Z'

다행인 건Date.prototype.toISOString()

권장 답변에서 알 수 있듯이 날짜를 사용할 때 문자열로 변환됩니다.JSON.stringify.

이 사용 사례에 적합한 또 다른 접근법은 다음을 사용하여 밀리초 단위로 시간을 저장하는 것입니다.

// Date.now() instead of new Date()
const millis = Date.now();

console.log(millis);

// same output as input
console.log(JSON.parse(JSON.stringify(millis)));

그래야 어떤 일이 일어날지 확신할 수 있다.JSON.stringify사용 시 동일하게 표시됨JSON.parse.

또한 2밀리초의 값을 가진 경우 날짜를 쉽게 비교할 수 있습니다.< ★★★★★★★★★★★★★★★★★」>.

또한 밀리초를 언제든지 날짜로 변환할 수 있습니다(일반적으로 사용자에게 렌더링하기 전).

const millis = Date.now();

console.log(millis);

console.log(new Date(millis));

메모: 적어도 데이터베이스에서는 밀리초를 날짜 표시로 사용하지 않는 것이 좋습니다.https://stackoverflow.com/a/48974248/10551293

언급URL : https://stackoverflow.com/questions/11491938/issues-with-date-when-using-json-stringify-and-json-parse

반응형