티스토리 뷰

발생일: 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
반응형
댓글
공지사항