본문 바로가기

Node.js공부/ iOS 앱을 위한 서버개발

node.js mongoDB 한국 시간 저장

반응형

mongoDB를 활용하여 서버를 구축하고 있는 중에, timestamp 변수로 현재 작성한 시간이 들어가야 합니다.

구글링을 통해 Date.today() 를 활용하면 된다고 알아냈는데, 그 결과는 바로,,




다음과 같이 timestamp에 얼추 한국시간과 비슷한 다른 시간이 들어가게 되었습니다! 바로 mongoDB는 Date 형식으로 ISODate를 사용해서 생기는 문제입니다.


그렇다면 이를 해결하기 위해서는 한국시간을 넣어줘야겠쬬(?)!!

해결방안은 두 가지가 있습니다. 첫 번째는 String으로 넣어주는 것과, 두 번째는 직접 ISODate에 들어갈 값을 한국 시간으로 포맷팅 해주는 것이죠 

첫 번째 해결책은 다음과 같습니다 :)


1. npm Install moment

2. npm install moment-timezone

3. var moment = require('moment');

4. moment.tz.setDefault("Asia/Seoul);

5. var date = moment().format('YYYY-MM-DD HH:mm:ss');

6. console.log(date);




그 결과!



postman을 통한 사용 확인 성공!




아직 ISODate형식으로 나오는 것이 보이시죠?

이것은 mongoDB schema 설정 시 데이터 타입을 String 으로 바꾼 후 다시 시도해보니




다음과 같이 지금 시간이 들어갈 수 있게 되었습니다.

스트링으로 처리하게 되면, 클라이언트쪽에서 시간을 조정하는 것도 필수적이겠죠?


두 번째 해결방안은 직접 데이터를 지정하여 넣는 것인데요, 저는 다음과 같은 함수를 구현하였습니다.


function getCurrentDate(){
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth();
var today = date.getDate();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var milliseconds = date.getMilliseconds();
return new Date(Date.UTC(year, month, today, hours, minutes, seconds, milliseconds));
}

  

이렇게 지정한 후, 새로운 데이터를 insert할 때 getCurrentDate() 함수를 호출하여 리턴받은 Date를 넣게 되면, 한국 날짜가 뜨는 것을 볼 수 있습니다!

mongoDB는 ISODate형식으로 많은 함수를 제공하기 때문에, 두 번째 해결방안을 더 추천드립니다~

반응형