본문 바로가기
JAVASCRIPT

[JS][강제변환] 명시적 강제변환 : 날짜 <-> 숫자

by KBS 2022. 2. 10.
728x90

명시적 강제변환

날짜 <-> 숫자

+단항 연산자는 'Date 객체 -> 숫자' 강제변환 용도로도 쓰인다. 결과값이 날짜/시각 값을 유닉스 타임스탬프 표현형이기 때문이다.

 

var d = new Date("Thu, 19 Feb 2022 08:53:06 CDT");
+d; // 1645278786000

 

다음과 같이 현재 시각을 타임스탬프로 바꿀 때 관용적으로 사용하는 방법이다.

 

var timestamp = +new Date();

 

생성자 호출시 전달 인자가 없다면 괄호는 생략 가능한, 기이한 자바스크립트 구문 '트릭'이 있다는 걸 알고있는 사람도 많을 것이다. 그래서 앞의 코드는 var timestamp = +new Date;처럼 서도된다. 하지만 괄호를 생략하면 가독성이 좋아진다는 말을 인정하지 않는 사람들도 있으며, 일반적ㅇ린 fn() 호출 형식이 아닌 new fn()호출 형식에만 적용되는 흔치않은 예외 구문이다.

 

그러나 강제변환을 하지 않아도 Date 객체로부터 타임스탬프를 얻는 방법이 있다. 오히려 강제변화을 하지 않는 쪽이 더 명시적이므로 권장할 만하다.

 

var timestamp = new Date().getTime();
// var timestamp = (new Date()).getTime();
// var timestamp = (new Date).getTime();

 

하지만 ES5에 추가된 정적 함수 Date.now()를 사용하는 것이 더 좋다.

 

var timestamp = Date.now();

 

구 버전 브라우저에서 Date.now()를 사용하려면 다음 폴리필을 사용하자.

 

if (!Date.now()) {
  Date.now = function () {
    return +new Date();
  };
}

 

날짜 타입에 관한 한 강제변환은 권하고 있지 않다. 현재 타임스탬프는 Date.now()로, 그 외 특정 날짜/시간의 타임스탬프는 new Date().getTime()를 대신 사용하도록 하자

 


참고

  • You Don't Know JS ( 한빛 미디어 )
728x90

댓글