[모던 JavaScript 튜토리얼] 30. Date 객체와 날짜
객체 생성하기
Date
객체는 생성자로 만들 수 있으며, 문서에서 나열된 파라미터들은 아래와 같다.
- new Date()
- new Date(milliseconds)
- new Date(datestring)
- new Date(year, month, date, hours, minutes, seconds, ms)
new Date()
let now = new Date();
console.log(now); // 2021-07-14T05:45:12.891Z
new Date()
호출로 현재 날짜와 시간이 저장된 Date
객체를 얻을 수 있다.
new Date(milliseconds)
UTC 기준 1970년 1월 1일 0시 0분 0초에서 milliseconds
밀리초 후의 시점이 저장된 Date 객체를 반환한다. 굳이 쓸 일이 없을듯?
new Date(datestring)
let date = new Date("2021-07-14");
console.log(date); // 2021-07-14T00:00:00.000Z
문자열을 파싱해 그 값으로 시간을 설정한 Date
객체를 리턴한다.
new Date(year, month, date, hours, minutes, seconds, ms)
년, 월, 일, 시, 분, 초, 밀리초를 설정해 Date
객체를 생성할 수도 있다.
날짜 구성요소 얻기
Date
객체의 메서드를 사용하면 연, 월, 일 등의 값을 얻을 수 있다.
getFullYear()
네 자릿수 연도를 반환한다.
참고)
getYear()
는 더이상 사용되지 않는 비표준 메서드이다. 이 메서드는 두 자릿수 연도를 반환하는 경우가 있으므로 문서에선 사용하면 안된다고 경고한다.
getMonth()
월을 반환한다. (0이상 11 이하, 각 1월부터 12월까지)
getDate()
일을 반환한다. (1이상 31이하)
getDay()
일요일을 나타내는 0
부터 토요일을 나타내는 6
까지의 숫자 중 하나를 반환한다.
getHours(), getMinutes(), getSeconds(), getMilliseconds()
각각 시, 분, 초, 밀리초를 반환한다.
getTime()
let date = new Date();
console.log(date); // 2021-07-14T05:55:27.928Z
console.log(date.getTime()); // 1626242127928
주어진 날짜와 1970년 1월 1일 00시 0분 00초
사이의 간격인 타임스탬프를 반환한다.
getTimezoneOffset()
현지 시간과 표준 시간의 차이를 분 단위로 반환한다.
날짜 구성요소 설정하기
아래와 같은 메서드들이 있다.
- setFullYear(year, [month], [date])
- setMonth(month, [date])
- setDate(date)
- setHours(hour, [min], [sec], [ms])
- setMinutes(min, [sec], [ms])
- setSeconds(sec, [ms])
- setMilliseconds(ms)
- setTime(milliseconds) : 1970년 1월 1일 00:00:00 UTC부터 주어진 밀리초 이후 날짜를 설정
자동 고침
let date = new Date(2013, 0, 32);
console.log(date); // 2013-02-01T05:55:27.928Z
Date
객체엔 자동고침(autocorrection)이라는 기능이 있다. 범위를 벗어나는 값을 설정하려고 하면, 자동으로 날짜를 수정해주는 기능이다.
let date = new Date(2016, 1, 28);
date.setDate(date.getDate() + 2);
console.log(date); // 2016-03-01T15:00:00.000Z
위 코드는 2016년 2월 28일로부터 이틀 뒤 날짜를 구하는 내용이다. 윤년이고 말고를 생각할 필요 없이 이틀 뒤 날짜를 원하면, 단순히 2를 더해주는 것으로부터 알아서 Date
객체에 계산을 맡길 수 있다.
Date 객체를 숫자로 변경해 시간차 측정하기
let date = new Date();
console.log(+date); // 1626242959473
console.log(date.getTime()); // 1626242959473
Date
객체를 숫자형으로 변경하면 getTime()
을 호출한 결과와 같이 타임스탬프가 된다.
let start = new Date();
for (let i = 0; i < 1000000; i++) {
let doSomething = i * i * i;
}
let end = new Date();
console.log(`반복문을 모두 도는데 ${end - start} 밀리초가 걸렸습니다.`); // 반복문을 모두 도는데 4 밀리초가 걸렸습니다.
시작과 끝 타임스탬프를 찍어 두 시간 차를 구해, 연산하는 데 걸린 시간을 측정할 수 있다.
Date.now()
let start = Date.now();
for (let i = 0; i < 1000000; i++) {
let doSomething = i * i * i;
}
let end = Date.now();
console.log(`반복문을 모두 도는데 ${end - start} 밀리초가 걸렸습니다.`); // 반복문을 모두 도는데 4 밀리초가 걸렸습니다.
Date.now()
는 현재 타임스탬프를 리턴한다. Date
객체를 만들지 않기 때문에 new Date().getTime()
보다 빠르고, 가비지 컬렉터의 일을 덜어준다는 장점이 있다.
Date.parse와 문자열
let ms = Date.parse("2012-01-26T13:51:50.417-07:00");
console.log(ms); // 1327611110417
Date.parse(str)
을 사용하면 문자열에서 날짜를 읽어올 수 있다. 단, 문자열 형식은 YYYY-MM-DDTHH:mm:ss.sssZ
형식이어야 한다.
- YYYY-MM-DD : 날짜(연-월-일)
- “T” - 구분 기호로 사용됨
- HH:mm:ss.sss : 시:분:초.밀리초
- “Z” : 옵션으로
+-hh:mm
형식의 시간대를 나타낸다.
위 조건을 만족하는 문자열을 대상으로 Date.parse(str)
을 호출하면, 문자열과 대응하는 날짜의 타임스탬프가 리턴된다. 만족하지 않는 형식이라면, NaN이 리턴된다.
댓글남기기