티스토리 뷰
발생일: 2014.12.09
키워드: Date.parse(), new Date(), Date, ISO-8601, RFC2822, ISO8601, 날짜, IE9
문제:
얼마 전에 서버 시간과 클라이언트 시간의 오차를 줄이려고,
서버 응답의 헤더를 가져와서 타임스탬프로 변경해 비교하는 코드를 작성했었다.
서버의 Date 문자열을 바로 타임스탬프로 변환하기 위해서 아래처럼 `Date.parse()`를 사용했다.
var dateResponseHeader = 'Thu, 11 Dec 2014 13:08:28 GMT’;
var serverTime = Date.parse(dateResponseHeader);
위 코드는 잘 동작했다.
그리고 며칠이 지난 후에, 옆 자리 D와 서버 응답에 포함된 시간 데이터를 가공하는 것에 대한 얘기를 하다가,
`Date.parse()`로 처리하자고 했더니, 이 포맷은 특정 브라우저에서는 지원하지 않는다고 한다.
아래와 같은 포맷이었다.
2014-12-11T14:48:00
어랏. 그랬었던건가?
해결책:
처음 서버 헤더의 값을 사용했었던 `Thu, 11 Dec 2014 13:08:28 GMT`포맷은,
RFC2822 / IETF 포맷이고 모든 브라우저에서 지원하기 때문에 문제가 되지 않는다.
이번에 이슈가 되었던 `2014-12-11`이나 `2014-12-11T14:48:00`은 ISO 8601 포맷인데,
이 포맷으로 `Date` 객체를 생성하거나 파싱하는 건 ECMAScript 5 버전부터 지원한다고 한다.
익스플로러에선 9 버전부터 지원한다.
참고로, ISO 8601 포맷은 아래 형태와 같은 형태를 갖는데,
간략하게 표현할 수도 있어서 타임존 정보를 포함하지 않는 경우도 있다.
YYYY (eg 1997)
YYYY-MM (eg 1997-07)
YYYY-MM-DD (eg 1997-07-16)
YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
타임존을 포함하지 않는 경우,
- ECMAScript 5 버전은 UTC 기준으로 파싱하고,
- ECMAScript 6 (Draft) 버전은 로컬 시간을 기준으로 파싱하므로,
사용할 때엔 주의가 필요하다.
참고:
MDN Date.parse()
ISO 8601
RFC2822
반응형
댓글
공지사항