자바스크립트에서 시간을 다루는 데에는 moment.js 만큼 좋은 것이 없다. 포맷변환도 쉽고 사용법도 상당히 직관적이다. 오늘 문제는 ISO 규격으로 시간을 다루던 중 발생됐던 일이다.

나는 흘러간 시간을 구해야하는데 원리는 사실 간단하다. 현재시간에서 기준이 되는 시간을 빼서 1초마다 업데이트 하면 되는 것이다. 하지만 시간이 자꾸 엉뚱하게 만들어지는 것을 보고 왜 그런가 살펴보니 정확히 한국기준 9시간 미래의 시간으로 기준 시간이 잡히고 있었다. 즉, 기준 시간이 00시00분 이어도 항상 09시 00분 상태로 계산이 되었다.

서버에는 시간을 ISO 규격으로 주고 클라이언트는 뭐 역시 moment.js를 통해서 쉽게 코드를 작성했다. 근데 왜 뭐가 문제일까 클라이언트에서 9시간을 더해서 꼼수로 해결해야 하나 등 많은 고민을 했다. 그런데 ISO 규격으로 날짜를 받는 것에서 재밌는 것을 발견했다.

2019-06-25T14:00:00.000 식으로 내려오는 것과 2019-06-25T14:00:00.000Z 라고 내려오는 것을 parsing 해보면 서로 다른 값이 나오고 정확히 9시간 차이가 난다. 그렇다 ISO 규격으로 내려줄 때 맨 뒤에 Z가 붙냐 안붙냐에 따라서 클라이언트에서 시간을 다르게 해석하는 것이다. 예전부터 있던 문제이고 요즘 브라우저에서는 없는 문제라고 하는데 아직도 존재하는 문제이다.

결국 서버에서 시간을 생성할 때 Z 문자열을 빼고 만드는 것으로 해결했다.