[JS] Date 객체
Date
Date 객체는 1970년 1월 1일 UTC(협정 세계시) 자정과의 시간 차이를 밀리초로 나타내는 정수 값을 담는다.
1970년 1월 1일 자정과의 시간 차이를 초 단위로 나타내는 UNIX 시간과는 다르다.
국제 표준 시간인 협정 세계시(UTC)는 그리니치 평균시(GMT)에 기반하며, UTC와 GMT는 초의 소숫점 단위에서만 차이가 난다.
그리니치 평균시(GMT)는 영국의 런던을 기점으로 하고 있어 우리나라와는 +9 시간 차이가 있다.(우리나라가 9시간 빠르다)
Date 객체의 중심을 구성하는 시간 값은 UTC 기준이지만, 날짜와 시간 등 구성 요소를 가져오는 메서드는 모두 현지의 시간대를 사용한다!
Date 의 최대 값은 JavaScript 에서의 안전한 최대 정수(Number.MAX_SAFE_INTEGER, 9,007,199,254,740,991)와 같지 않다.
ECMA-262 는 1970년 1월 1일 UTC에서 ±100,000,000일(1억일)을 표준 Date 객체의 최대 범위로 규정하고 있다.
객체 생성자
시간의 특정 지점을 나타내는 Date 객체를 플랫폼에 종속되지 않는 형태로 생성한다.
new Date()
//2022-05-19T05:37:53.462Z
new Date().toString()
//Thu May 19 2022 14:37:53 GMT+0900 (대한민국 표준시)
new Date('May 19, 2022 14:36:35')
//2022-05-19T05:36:35.000Z
new Date('2022-05-19T14:36:35')
//2022-05-19T05:36:35.000Z
Date 객체의 생성자에 dateString 값으로 대한민국 시간을 기준으로 작성하는 경우, 영국 시간으로 변환되어 출력된다.
개별 날짜 및 시간 구성 요소
new Date(2022, 4, 19)
//2022-05-18T15:00:00.000Z (UTC)
//2022-05-19T00:00:00.000Z (GMT+0900)
객체 내에 연, 월, 일, 시, 분, 초, 밀리초 를 차례로 입력할 수 있고, 입력한 값은 현지 시간 기준이며,
이에 대한 결과 값은 UTC 인 영국 기준 시간이다.
월의 경우, monthIndex 값으로 1월은 0, 2월은 1, … 12월은 11 이다.
new Date(2022)
//1970-01-01T00:00:02.022Z - ERROR
new Date(2022, 4)
//2022-04-30T15:00:00.000Z
new Date(2022, 4, 19)
//2022-05-18T15:00:00.000Z
new Date(2022, 4, 19, 14)
//2022-05-19T05:00:00.000Z
개별 날짜를 입력하는 경우, 최소한 년, 월을 입력해야 한다.
입력 값이 현지 시간 기준이므로, 출력되는 UTC 값은 -9 시간된 값이 된다.
dateString
new Date('2022')
//2022-01-01T00:00:00.000Z
new Date('2022-05')
//2022-05-01T00:00:00.000Z
new Date('2022-05-19')
//2022-05-19T00:00:00.000Z
new Date('2022-05-19T14:36:35')
//2022-05-19T05:36:35.000Z
dateString 값으로 객체를 생성하는 경우, UTC 기준으로 1월, 1일, 0시, 0분, 0초, 0밀리초를 기본 값으로 생성된다.
따라서 한국 시간 기준으로는 +9 시간을 해야한다.
개별 값 VS dateString
new Date(2022, 4, 19)
//2022-05-18T15:00:00.000Z
new Date('2022-05-19')
//2022-05-19T00:00:00.000Z
9시간의 차이가 발생한다.
두 개의 생성자 모두 현지 시간을 기준으로 입력값을 작성한다.
다만, dateString의 경우, UTC 기준 0시를 기본값으로 생성되나 현지 시간 기준 오전 9시가 기본값이 된다.
개별 값을 입력하는 경우, 현지 시간 기준 0시를 기본값으로 생성되어 출력되는 값은 UTC 기준으로 -9시간되어 출력된다.