P4Ch6.표준 내장 객체- 날짜

날짜 인스턴스

1
2
3
const date = new Date();
console.log(date);
//Fri May 19 2023 21:17:14 GMT+0900 (한국 표준시)

new Date(): 현재의 날짜와 시간 정보를 출력.

출력되는 시간은 실행 환경의 시스템 시간을 기준으로 한다.

1
2
3
const d1 = new Date(2023, 4, 19, 21, 9, 30);
console.log(d1);
//Fri May 19 2023 21:09:30 GMT+0900 (한국 표준시)

new Date()의 내부에 인자를 넣는 것으로 프로그래머가 지정한 시간과 날짜를 가진 인스턴스를 생성할 수 있다.

Javascript에서는 Month를 표시할때 zero-based numbering을 사용함에 유의해야한다. 따라서 위의 예제에서의 4는, 5월을 의미한다.

1
2
3
const d2 = new Date("Fri May 19 2023 21:09:30 GMT+0900 (한국 표준시)");
console.log(d2);
//Fri May 19 2023 21:09:30 GMT+0900 (한국 표준시)

Date 클래스를 생성자 함수로 호출할 때 년,월,일,시분초를 따로 인수로 넣어줄 수도 있지만, 타임스탬프 문자열을 넣는 걸로도 특정 시간과 날짜를 지닌 인스턴스를 생성 가능하다.

이때 들어가는 문자열은 YYYY-MM-DD 등과 같이 브라우저가 지원하는 유효한 형식이어야 한다.

프로토타입 메소드

시분초일월년 반환, 지정

  • getFullYear(), setFullYear()

    날짜 인스턴스의 년도를 반환하거나 지정한다.

    1
    2
    3
    4
    5
    6
    7
    
    const date = new Date();
    
    console.log(date.getFullYear()); //2023
    
    date.setFullYear(2022);
    console.log(date.getFullYear()); //2022
    console.log(date); //Thu May 19 2022 21:36:37 GMT+0900 (한국 표준시)
    


  • getMonth(), setMonth()

    날짜 인스턴스의 ‘달’을 반환하거나 지정한다.

    zero-based numbering이 사용됨에 유의

    1
    2
    3
    4
    5
    6
    7
    
    const date = new Date();
    
    console.log(date.getMonth()); //4 //5월
    
    date.setMonth(0);
    console.log(date.getMonth()); //0 //1월
    console.log(date); //Thu Jan 19 2023 21:40:01 GMT+0900 (한국 표준시)
    


  • getMonth(), setMonth()

    날짜 인스턴스의 ‘일’를 반환하거나 지정한다.

    1
    2
    3
    4
    5
    6
    7
    
    const date = new Date();
    
    console.log(date.getDate()); //19
    
    date.setDate(11);
    console.log(date.getDate()); //11
    console.log(date); //Thu May 11 2023 21:42:06 GMT+0900 (한국 표준시)
    


  • getHours(), setHours()
  • getMinutes(), setMinutes()
  • getSeconds(), setSeconds()


getDay()

날짜 인스턴스의 요일을 반환한다.

  • 월~일까지의 요일을 0~6으로 반환한다.

set 메소드는 존재하지 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const date = new Date();
const day = date.getDay();

console.log(day); //5
console.log(getDatKo(day)); //토

function getDatKo(day) {
  switch (day) {
    case 0:
      return "";
    case 1:
      return "";
    case 2:
      return "";
    case 3:
      return "";
    case 4:
      return "";
    case 5:
      return "";
    case 6:
      return "";
  }
}

getTime(), setTime()

1970-01-01 00:00:00 (유닉스타임)부터 경과한 날짜 인스턴스의 밀리초를 반환하거나 지정한다.

1
2
3
4
5
6
7
8
const date = new Date();

console.log(date.getTime()); //1684500722976
console.log(date); //Fri May 19 2023 21:52:02 GMT+0900 (한국 표준시)

date.setTime(1700000000000);
console.log(date.getTime()); //1700000000000
console.log(date); //Wed Nov 15 2023 07:13:20 GMT+0900 (한국 표준시)

getTime으로 반환된 밀리초 값이 더 클수록 더 미래의 시간이다.


아래의 예제는 getTime을 사용해 어떤 날짜 인스턴스가 인수로 들어온 날짜 인스턴스보다 더 미래의 시간인지 여부를 판단하는 프로토타입 메소드를 만드는 예시이다.

1
2
3
4
5
6
7
8
9
10
11
Date.prototype.isAfter = function (date) {
  const a = this.getTime();
  const b = date.getTime();
  return a > b;
};

const d1 = new Date("2022 21:52:25 GMT+0900 (한국 표준시)");
const d2 = new Date("2023 21:52:25 GMT+0900 (한국 표준시)");

console.log(d1.isAfter(d2)); //false
console.log(d2.isAfter(d1)); //true

Date.now()

메소드가 호출될 때 1970-01-01 00:00:00 (유닉스타임)으로부터 경과한 밀리초를 반환

1
2
3
4
5
6
7
8
const time = new Date().getTime();
console.log(Date.now());   //1684501572151
console.log(time);         //1684501572151

setTimeout(() => {
  console.log(Date.now()); **//1684501573163**
  console.log(time);       //1684501572151
}, 1000);

위 코드에서 1000ms 이후 다시 Date.now() 반환값과 time 인스턴스 값을 출력했을 때, Date.now()의 값이 time의 값보다 대략 1000ms정도 큰 것을 확인 할 수 있다.

  • Date.now() : 현재 시간의 밀리초 타임스탬프를 반환
  • Date.getTime(): 특정 Date 객체의 시간을 밀리초로 반환