2015-01-01 3 views
2
$localStorage.doctorDateTime.push({        
    fullDate : new Date(doctorDateTime) 
    }); 

나는 새로운 일에 날짜 문자열을 통과 한 후 로컬 저장소에 저장하지만 난 로컬 저장소에서 검색 할 때 나에게이 형식 보여주는 : 만약 동안로컬 스토리지는

2015-01-01T13:41:18.300Z 

을 console.log (doctorDateTime). 그것은 바로 날짜 문자열을 보여줍니다

답변

4

localStorage에 저장된 데이터는 문자열 만입니다. 문자열 유형이 아닌 무언가를 저장하려고하면 암시적인 유형 강제 변환이 수행됩니다. 당신은 더 나은 명시 적으로 Date 개체를 변환했던

localStorage.setItem("fullDate", new Date(doctorDateTime)); 

: Date.prototype.toString() 같은 코드를 수행하면 작동하는 동안 당신이 도착하면, Date.prototype.toISOString()처럼 동작하기 때문에

그러나, 당신이 사용하는 어떤 lib 디렉토리 구현에 따라 모양 localStorage로 설정하기 전에 원하는 형식의 문자열.

그러나, 당신은 여전히 ​​함께 Date 개체를 다시 얻을 수있는 ISO time string :

var str = '2015-01-01T13:41:18.300Z'; 
var time = new Date(str); // you got the object back! 
+0

처럼 보이는 끝나는 무엇을의로 정말,이 문제가되지 않습니다 , 당신은 여전히, 그 시간 문자열로 객체를 다시 얻을 내 업데이트 된 대답의 마지막 부분을 볼 수 있었다. –

+0

@MohammadFaizanKhan을 날짜를 저장하는 방법을 – Leo

+0

허용하지만 NG 반복을 사용하여 보여 더 많은 코드를해야 할 –

2

(new Date()).toString() 할 때 일어나는 일은 로컬 저장소에 저장 될 때 문자열로 변환 될 때 날짜의 문자열 표현입니다.

는 점은 타임 스탬프 대신, 그것은 시대에서 밀리 초를 나타내는 숫자, 그리고

$localStorage.doctorDateTime.push({        
    fullDate : (new Date(doctorDateTime)).getTime() 
}); 

로컬 저장소의 기능 만 문자열 키/값 쌍을 처리하기 위해 제한되는 객체입니다.
일부 브라우저는 객체를 저장하지만 신뢰할 수있는 것이 아니므로 문자열을 저장해야합니다. 가장 쉬운 방법은 타임 스탬프를 저장 한 다음 new Date을 통해 해당 타임 스탬프를 실행하여 로컬 저장소에서 날짜 개체를 가져 오는 것입니다.

+0

날짜로 저장하고 싶습니다. 원인은 날짜가 아닌 문자열로 검색했기 때문입니다. 그리고 그 문자열에 나는 orderBy를 사용해야합니다. –

+1

@MohammadFaizanKhan - 어쩌면 충분히 명확하지 않았을 수도 있습니다! – adeneo

+0

그것은'toString'이 아니며, OP가 제공하는 문자열 형식은'toISOString'에 의해 만들어집니다. 그가 사용하고있는 lib 구현에 의존하는 것처럼 보입니다. – Leo

0

당신이 객체를 전달하는 경우 먼저 개체의 JSON.stringify을 할 것입니다 로컬 스토리지 다음 로컬 스토리지에 저장하기 . 그래서 다음에 그것을 검색 할 때 날짜 객체의 문자열 값을 줄 것입니다. JSON.stringify (new Date())를 수행하면 날짜 문자열이 생깁니다. 다음에 가져올 때와 같은 문자열입니다.

최상의 솔루션은 로컬 저장소에 저장할 때 날짜를 타임 스탬프로 변환하는 것입니다. 로컬 저장소에서 가져올 때 Date 객체로 변환합니다.

LocalStorage는 텍스트 만 지원합니다. 따라서 저장하기 전에 객체에 항상 JSON.stringify을 수행합니다.