Date.toISOString 을 사용할 때 주의점
js의 Date의 메소드인 toISOStirng을 사용할 때 주의점을 알아본다
javascript에서 쓰이는 Date 타입은 toISOString() 이라는 메소드를 제공한다. 이 메소드는 단순화한 ISO 형식의 문자열을 반환한다. ( YYYY-MM-DDTHH:mm:ss.sssz)
하지만 실제로 이 메소드를 써보면 정확한 시간을 반환하지 않는 문제가 있다. 이는 어째서일까?
toISOString()
MDN 공식문서를 살펴보면 다음과 같이 설명하고 있다.
**`toISOString()`** 메서드는 단순화한 확장 ISO 형식([ISO 8601](https://ko.wikipedia.org/wiki/ISO_8601))의 문자열을 반환합니다. 반환값은 언제나 24글자 또는 27글자(각각 **`YYYY-MM-DDTHH:mm:ss.sssZ`** 또는 **`±YYYYYY-MM-DDTHH:mm:ss.sssZ`**)입니다.시간대는 언제나 UTC이며 접미어 `Z`로 표현합니다.
정확하게 말하자면, 언제나 zero UTC offset을 기반으로한 시간으로 반환한다는 뜻이다. 하지만 우리나라는 UTC+0 가 아닌, UTC+9 를 기준으로 하고 있기 때문에 우리나라에서 해당 메소드를 사용하면 원하는 시간이 반환되지 않는 것이다.
해결
간단하게 해결하자면 다음과 같은 방법이 있다.
const KRoffset = date.getTimezoneOffset() * 60000;
const dateOffset = new Date(date.getTime() - offset);
console.log('ISOString : ', dateOffset.toISOString());
// 한국 시간대에 맞게 직접 offset을 조정해준다.당연하지만, 이런 부분을 쉽게 구현하도록 도와주는 moment.js 등의 라이브러리를 사용해도 좋다. 중요한 것은 이 메소드를 사용하며 생길 수 있는 일을 인지하는 것이다.