본문 바로가기
FRONTEND/Javascript

[Javascript] Date() / new Date()/ +new Date() 비교 (false 이유)

by LAY CODER 2021. 4. 20.
728x90

Date 

 

Date 생성자는 시간의 특정 지점을 나타내는 Date 객체를 생성한다. 

 

Date객체는 1970년 1월 1일 UTC(국제표준시) 00:00으로부터 지난 시간을 밀리초로 나타내는 유닉스 타임스탬프를 사용한다.

 

아래와 같이 다양하게 Date객체를 생성하고 날짜를 지정할 수 있다.

 

new Date();
new Date(value);
new Date(dateString);
new Date(year, monthIndex[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

var today = new Date(); 
var birthday = new Date(95,11,17);
var birthday = new Date("December 17, 1995 03:24:00"); 
var birthday = new Date(95,11,17,3,24,0);

 

 

year

 

연도를 나타내는 정숫값. 0부터 99는 1900부터 1999로 처리. 예제 참고.

 

monthIndex

 

월을 나타내는 정숫값. 0은 1월을 나타내고 11은 12월을 나타냄.

 

day [Optional]

 

일을 나타내는 정숫값. 기본값은 1.

 

hours [Optional]

 

시를 나타내는 정숫값. 기본값은 0(자정).

 

minutes [Optional]

 

분을 나타내는 정숫값. 기본값은 0분.

 

seconds [Optional]

 

초를 나타내는 정숫값. 기본값은 0초.

 

milliseconds [Optional]

 

밀리초를 나타내는 정숫값. 기본값은 0밀리초.

 


 

new Date() / Date() / +new Date() 비교

 

    const date1 = new Date('December 17, 1995 03:24:00');
    // Sun Dec 17 1995 03:24:00 GMT...

    const date2 = new Date('1995-12-17T03:24:00');
    // Sun Dec 17 1995 03:24:00 GMT...

    console.log(date1 === date2);
    // expected output: false;

    console.log(date1 - date2);
    // expected output: 0

    const date3 = Date('December 17, 1995 03:24:00');
    // Tue Apr 20 2021 17:24:07 GMT+0900 (GMT+09:00)
    // Date() 안에 어떤 값을 넣어도 현재 시각을 반환

    const date4 = Date('1995-12-17T03:24:00');
    // Tue Apr 20 2021 17:24:07 GMT+0900 (GMT+09:00)

    console.log(date3 === date4);
    // expected output: true;

    console.log(date3 - date4);
    // expected output: NaN;

    const date5 = +new Date('December 17, 1995 03:24:00');
    // 819138240000

    const date6 = +new Date('1995-12-17T03:24:00');
    // 819138240000

    console.log(date5 === date6);
    // expected output: true;

    console.log(date5 - date6);
    // expected output: 0

 

Date()

 

Date()를 사용하면 JavaScript Date 객체는 JavaScript Date를 생성자로 호출하여 인스턴스화 할 수 있다.

 

일반 함수로 호출하면 (즉, new 연산자없이) Date 객체가 아닌 현재 시각의 문자열이 반환된다.

 

그렇기에, Date() 끼리 연산하게 되면 NaN(Not A Number) 숫자가 아니라고 나온다.

 

new Date()

 

생성자 대신 new Date()를 사용하면 각 인스턴스는 고유하다.

 

동일한 생성자의 두 인스턴스는 서로 다른 객체이기 때문에 똑같은 속성을 가지고 있더라도 여전히 서로 다르다.

 

두 개의 다른 객체 참조를 비교 하고 있기 때문에 false를 반환하고

 

  • - 연산을 하면 두 객체의 millisecond의 차이를 출력한다.
  • + 연산을 하면 두 객체의 String 값을 이어서 출력한다.

 

+new Date()

 

+ 연산자는 개체를 숫자로 변환하는 역할을 한다.

 

숫자로 변환하기 위해서 자바스크립트는 .valueOf() 메소드를 호출하게 되고

 

Date 객체의 .valueOf 메소드는 .getTime() 과 동일한 일을 하기 때문에 + 기호를 붙이는 것 만으로

 

현재 시간을 millisecond 로 가져올 수 있다.

 

References


developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Date

stackoverflow.com/questions/41980177/why-is-new-date-new-date-false-but-date-date-is-true

m.blog.naver.com/PostView.nhn?blogId=jjjhyeok&logNo=20137207524&proxyReferer=https:%2F%2Fwww.google.com%2F

 

 

댓글