220106 TIL new Date()

Date 생성자 함수

자바스크립트 코드가 실행된 시스템 시계로부터 하루 전, 일주일 전, 3개월 전 등 이전 시간을 구해야 하면 어떻게 해야 할까?

new Date()

new Date()를 인수 없이 new 연산자와 함께 호출하면 현재 날짜와 시간을 가진 Date 객체를 반환한다.

new 연산자 없이 Date()를 호출하면 문자열로 반환한다.

new Date(milliseconds)

Date 생성자 함수에 숫자타입의 밀리 초를 인수로 전달하면 1970년 1월 1일 00:00:00(UTC)을 기점으로 인수로 전달된 밀리초만큼 경과한 날짜와 시간을 나타내는 Date 객체를 반환한다.

협정 세계시 (Coordinated Universal Time/Universal Time Coordinated, UTC)는 1972년 1월 1일부터 시행된 국제 표준시이다. UTC는 국제원자시와 윤초 보정을 기반으로 표준화되었다.
UTC는 그리니치 평균시(GMT)에 기반하므로 GMT로도 불리기도 하는데, UTC와 GMT는 초의 소숫점 단위에서만 차이가 나기 때문에 일상에서는 혼용된다. 기술적인 표기에서는 UTC가 사용된다.
위키백과

86400000ms는 1day를 뜻하기 때문에 결과 값은 1970년 1월 1일에서 하루가 경과한 1970년 1월 2일이다.

1밀리세컨드(1ms) = 1/1000초(1000분의 1초)다.
1초(1s) = 1,000ms 다.
1분(1m) = 60초(60s) / 60s(60초) * 1,000ms(1초) = 60,000ms다.
1시간(1h) = 60분(60m) / 60m(60분) * 60,000ms(1분) = 3,600,000ms다.
하루(1d) = 24시간(24h) / 24h(24시간) * 3,600,000ms(1시간) = 86,400,000ms다.

사실 시작은 이전 기간 단위로 데이터를 구하는 방법을 알기 위함이었지만
이 TIL은 86400000ms을 이해하기 위해 쓴 것이다.

new Date()를 찍을 때마다 이해할 수 없는 긴 숫자들로 보였는데 이제는 그 긴 숫자들이 밀리초로 받아들여진다!!

1년 전 구하기

그러면 지금 시각을 기준으로 1년 전을 구해야 한다면 어떻게 해야 할 까?

1000 * 60 * 60 * 24를 이용하는 방법도 있지만 getFullYear(), setFullYear() 메서드를 사용하는 간단한 방법도 있다.

const END_DATE = new Date(); // 현재

new Date().setFullYear(END_DATE.getFullYear() - 1) // 1년 전
new Date().setFullYear(END_DATE.getFullYear() - 5) // 5년 전
new Date().setFullYear(END_DATE.getFullYear() - 10) // 10년 전
new Date().setFullYear(END_DATE.getFullYear() - 20) // 20년 전

+) 끝으로

day1부터 시작하면서 왜 month0부터 시작하는지 궁금해 찾아봤다.

Why does the month argument range from 0 to 11 in JavaScript's Date constructor?

요약하면 아래와 같다고 한다!

  • Javascript 날짜가 java.util.Date에서 카피했기 때문에 0을 기반으로 한 달을 사용한다고 한다.
  • 0으로 시작하는 이유는 배열 인덱스로 생각하면 1월은 인덱스가 0이기 때문이라고 한다.

좋은 웹페이지 즐겨찾기