꿈꾸는 개발자, Front-end Developer

Trust that the dots will connect in your future.

#CSS #Dev #EJS #HTML #Hexo #JavaScript #dev #jQuery #smallTalk #번역 #삽질 #신세계 #이론 #정보처리기사

글 작성 시간이 실제 시간과 맞지 않음


잔잔한 새벽에 올린 글들의 작성 시간이 후덥지근한 오후 시간으로 출력되는 것을 확인했다.
Local Server에서 테스트 할 때는 현재 시간이 출력되고, Heroku Server에서는 시간이 어긋나는 것을 보아

서버 위치가 달라서 생기는 문제로 의심해 본다.

function getTime(dateObj){ if(dateObj instanceof Date)
return get2digits(dateObj.getHours()); }

시간 차이를 보니 대략 9시간, 설마 GMT +9? 빙고!(사실 GMT가 아니라 UTC였지만)
게시판에 사용한 함수는 getHours,

검색을 해보니 setUTCHours라는 함수가 있는거 같은데, 아직 사용법이 눈에 잘 들어오지 않는다.
결국 함수 뒤에 +9를 덧붙여 return 시간 값에 9시간을 더하는 것으로 임시조치를 했다.

(더 깔끔한 방법이 있겠지…)

function getTime(dateObj) { if (dateObj instanceof Date)
return get2digits(dateObj.getUTCHours()+9);}

17.7.14 덧붙임 더 깔끔한 그 방법이 있었다!
getHours와 getUTCHours메소드는 각각 서버 기준 시간, 협정 세계 시간(GMT로 이해해도 무방)을 기준으로

현재 시간을 불러와 0~23의 숫자 값을 return 한다.
나의 경우 한국 시간(GMT +9)에 맞추기 위해 getUTCHours()+9를 한 것인데,

이럴 경우 만약 UTC 시간이 15시를 넘을 경우 return 값이 24를 넘어버린다.

예) 20:00 UTC -> 29:00 게시판 작성 시간이 29시로 찍히는 해괴망측한 상황이..

이를 해결하기 위해 getTime 메소드를 이용한다

getTime 메소드는 1970.01.01 자정 이후 경과한 시간을 밀리세컨드(ms) 단위 값으로 return 하는 메소드이다.

이를 이용해 현재 시간을 ms 단위로 알아내고 그 값에 +(60*60*1000)*9를 해주면 9시간이 추가된 ms 값을

얻을 수 있다. 그리고 다시 얻은 ms 값을 변수에 담고 다시 이 변수 값을 getHours 메소드를 이용해

24시 단위 값으로 얻어내면 완성이다.


요약하자면,
getHours()는 0~23의 값을 출력함.
이 값에 숫자를 바로 더하면 값이 23을 초과함. -> Error getTime()은 현재시간을 ms 단위로 출력함.
이 값에 3600000*9를 더하면 현재 시간에 9시간을 더한 시간을 구할 수 있음.
더한 시간을 getHours(or getUTCHours)메소드를 이용해 24시간 단위 값으로 출력함.

function getDate(dateObj) {
if (dateObj instanceof Date)
var date = new Date(dateObj.getTime()+(3600000*9));
return date.getUTCHours())

도움을 주신 Ian H(http://www.a-mean-blog.com)님께 감사드립니다.


#dev

#dev