[모던 JavaScript 튜토리얼] 30. Date 객체와 날짜

2 분 소요

본문 바로가기


객체 생성하기

Date 객체는 생성자로 만들 수 있으며, 문서에서 나열된 파라미터들은 아래와 같다.

  1. new Date()
  2. new Date(milliseconds)
  3. new Date(datestring)
  4. 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이 리턴된다.

댓글남기기