Section 6. 자바스크립트 Date 객체
Date 객체는 날짜와 시간 관련 기능들을 제공하는 빌트인 객체이다.
I. 생성자 함수
1. 현재 날짜와 시간
const now = new Date();
console.log(typeof now); //object
console.log(now); //Fri Mar 31 2023 11:11:02 GMT+0900 (한국 표준시)
const nowStr = Date()
console.log(typeof nowStr); //string
console.log(nowStr); //Fri Mar 31 2023 11:11:13 GMT+0900 (한국 표준시)
현재 날짜와 시간이 출력되는 것을 알 수 있다.
두개의 출력문을 보면 특징은 다음과 같다.
- new와 함께 사용하면 인스턴스 객체가 된다.
- new 없이 사용하면 문자열을 반환한다. - new Date().toString() 과 같다.
2. 밀리초 기준
1970년 1월 1일 자정(UTC, 그리니치 평균시)으로부터 인자로 주어진 밀리초만큼 경과한 시간이다.
여기서 자정은 해당 일 0시 0분 0초를 의미한다.
console.log(
new Date(0)
); //Thu Jan 01 1970 09:00:00 GMT+0900 (한국 표준시)
console.log(
new Date(1000 * 60 * 60 * 24 * 365 * 30)
); //Sat Dec 25 1999 09:00:00 GMT+0900 (한국 표준시)
3. 단위별 숫자 입력
연, 월 (0부터 시작) 은 필수이다.
일, 시, 분, 초, 밀리초는 옵션이다. 그리고 없을 시에는 0이다.
console.log(
new Date(2022, 8)
); //Thu Sep 01 2022 00:00:00 GMT+0900 (한국 표준시)
console.log(
new Date(2022, 8, 20, 14, 35)
); //Tue Sep 20 2022 14:35:00 GMT+0900 (한국 표준시)
console.log(
new Date(2022, 8, 20, 14, 35, 47, 789)
); //Tue Sep 20 2022 14:35:47 GMT+0900 (한국 표준시)
4. dateString
특정 형식의 문자열을 인식 가능하다.
*하지만 동작이 일관적이지 못하고, 브라우저마다 차이가 존재해서 권장하지 않는다.
console.log(
new Date('August 20, 2022 14:35:47')
); //Sat Aug 20 2022 14:35:47 GMT+0900 (한국 표준시)
console.log(
new Date('2022-08-20T14:35:47')
); //Sat Aug 20 2022 14:35:47 GMT+0900 (한국 표준시)
II. 정적 메서드
1. now
연재의 밀리초 숫자값 (앞으로 UTC 1970/1/1 자정부터 경과값을 의미) 반환하는 메서드이다.
console.log(Date.now()); //1680229292824
2. parse, UTC
주어진 시간의 밀리초 숫자값을 반환하는 메서드이다.
parse는 dateString, UTC는 단위별 숫자를 받는다.
console.log(
Date.parse('August 20, 2022 00:00:00 UTC')
); //1660953600000
console.log(
// 💡 시스템(실행 컴퓨터) 시간이 한국이면 시차 9시간 적용
Date.parse('August 20, 2022 09:00:00')
); //1660953600000
console.log(
// ⭐️ 월은 0부터 시작
Date.UTC(2022, 7, 20, 0, 0, 0)
); //1660953600000
III. 인스턴스 메서드
1. toString, toDateString, toTimeString
각각 전체, 날짜만, 시간만 나타내는 문자열을 출력하는 메서드이다.
시스템(컴퓨터)의 언어 설정별로 다르게 나타난다.
const now = new Date();
console.log(
now.toString()
); //Fri Mar 31 2023 11:24:25 GMT+0900 (한국 표준시)
console.log(
now.toDateString()
); //Fri Mar 31 2023
console.log(
now.toTimeString()
); //11:24:25 GMT+0900 (한국 표준시)
2. toLocaleString
주어진 언어 코드를 기준으로 표현한 문자열을 반환하는 메서드이다.
인자가 없을 시 시스템의 언어를 적용한다.
const now = new Date();
console.log(
now.toString()
); //Fri Mar 31 2023 11:25:49 GMT+0900 (한국 표준시)
console.log(
now.toLocaleString()
); //2023. 3. 31. 오전 11:25:49
console.log(
now.toLocaleString('ko-KR')
); //2023. 3. 31. 오전 11:25:49
console.log(
now.toLocaleString('de-DE')
); //31.3.2023, 11:25:49
3. 단위별 setter, getter 메서드들
const now = new Date();
console.log(now.toString()); //Fri Mar 31 2023 11:26:51 GMT+0900 (한국 표준시)
for (i of [
[ '연:', now.getFullYear() ],
[ '월:', now.getMonth() ], // 0 ~ 11
[ '일:', now.getDate() ],
[ '요일:', now.getDay() ], // 0부터 일월화수목금토
[ '시:', now.getHours() ],
[ '분:', now.getMinutes() ],
[ '초:', now.getSeconds() ],
[ '밀리초:', now.getMilliseconds() ]
]) {
console.log(i[0], i[1]);
}
출력문은 다음과 같다.
const now = new Date();
console.log(now.toString()); //Fri Mar 31 2023 11:29:11 GMT+0900 (한국 표준시)
now.setFullYear(2022);
now.setMonth(7);
now.setDate(20);
// 💡 요일은 setter가 없음
now.setHours(14);
now.setMinutes(35);
now.setSeconds(47);
now.setMilliseconds(789);
console.log(now.toString()); //Sat Aug 20 2022 14:35:47 GMT+0900 (한국 표준시)
이것을 활용하는 예시는 다음과 같다.
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth() + 1;
const date = now.getDate();
const day = '일월화수목금토'[now.getDay()];
console.log(
`오늘은 ${year}년 ${month}월 ${date}일, ${day}요일입니다.`
);
//오늘은 2023년 3월 31일, 금요일입니다.
4. getTime, setTime
밀리초 숫자값을 set하고 get하는 메서드이다.
const date1 = new Date(2020, 7, 20);
const date1value = date1.getTime();
console.log(date1.toString()); //Thu Aug 20 2020 00:00:00 GMT+0900 (한국 표준시)
console.log(date1value); //1597849200000
const date2 = new Date();
console.log(date2.toString()); //Fri Mar 31 2023 11:31:44 GMT+0900 (한국 표준시)
date2.setTime(date1value);
console.log(date2.toString()); //Thu Aug 20 2020 00:00:00 GMT+0900 (한국 표준시)
5. getTimezoneOffset
시스템의 시간대와 UTC의 시간차를 분 단위로 반환하는 메서드이다.
한국의 경우 9시간 차이가 있다.
console.log(
new Date().getTimezoneOffset() / 60
); //-9
6. toISOString
ISO 8061이란 형식의 문자열을 반환하는 메서드이다.
UTC 기준으로 반환한다.
const now = new Date();
// 시간차 존재
console.log(
now.toISOString()
); //2023-03-31T02:33:58.705Z
console.log(
now.toString()
); //Fri Mar 31 2023 11:33:58 GMT+0900 (한국 표준시)
현재시각으로 맞추면 다음과 같다.
const now = new Date();
const timezoneOffset = now.getTimezoneOffset() * 60000;
const isoStr = new Date(now.getTime() - timezoneOffset).toISOString();
console.log(isoStr); //2023-03-31T11:34:32.791Z
console.log(now.toString()); //Fri Mar 31 2023 11:34:32 GMT+0900 (한국 표준시)