2012-07-15 2 views
22

JavaScript를 사용하여 두 시간의 차이를 계산하려고합니다. 그것은 단지 기본적인 수학이지만, 나는 JSON.stringify()JSON.parse()을 사용하는 동안 그 문제를 가지고있는 것 같습니다.JSON.stringify() 및 JSON.parse()를 사용할 때 Date() 관련 문제

JSON.stringify() 기능을 날짜에 적용하는 것이 궁금한 경우 로컬 저장소를 사용하여 클라이언트 측에 일부 데이터를 저장하고 클라이언트가 내 웹 사이트에 다시 접속할 때마다 사용하기 때문에 (즉, 서버에 더 많은 요청을하는 것보다). 그 데이터는 대개 한 번 업데이트됩니다 (다른 웹 사이트에서 API를 통해 데이터를 가져 오는 중입니다). 따라서 data_update 변수를 설정하고 다른 데이터와 함께 저장합니다.

그런 식으로 로컬 저장소에서 저장된 데이터를 가져 와서 확인이 이루어질 때 data_update (날짜/시간)과 시간/날짜의 차이가 있는지 확인하고 주보다 큰지 확인합니다/일/등.

이것이 내가 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의 출력을 보면

+0

당신은에 의해이 같은 도발을 방지 할 수 있습니다 stringify/parse 대신에 rhaboo와 같은 localStorage 래퍼를 사용합니다.이 래퍼는이 외에도 많은 부정확성이 있습니다. –

답변

43

, 당신은 그것을 볼 수 있습니다 : 문자열에서

JSON.stringify(new Date()) 

결과. JSON에는 JSON.parse가 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 
15
JSON.stringify(new Date()) 

반환

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

하나님 감사는 다음과 같습니다 Date.toISOString()

+0

'JSON.stringify()'가 백그라운드에서'Date.toISOString()'을 사용한다는 것을 알아두면 좋을 것입니다. 이로 인해 제 코드가 훨씬 명확 해졌습니다. –