본문 바로가기

Today I Learned

모던 자바스크립트 Deep Dive 30장 Date

  • UTC : Coordinated Universal Time 협정 세계시
  • GMT : Greewich Mean Time, 그리니치 평균시
  • KST : Korean Standard Time, 한국 표준시

Date 표준 빌트인 객체이고, 날짜와 시간을 위한 메서드를 제공한다. 현재 날짜와 시간은 코드가 실행된 시스템의 시계에 의해 결정된다.

Date 생성자 함수

Date 객체는 내부적으로 정수값을 갖는데, 이는 1970 1 1 00:00:00(UTC) 기점으로 객체가 나타내는 날짜와 시간까지의 밀리초(천분의 1) 나타낸다.

Date 메서드

Date.prototype.getTime

1970 1 1 00:00:00(UTC) 기점으로 Date 객체의 시간까지 경과된 밀리초를 반환한다.

new Date('2020/07/24/12:30').getTime(); // -> 1595561400000

Date.prototype.setTime

1970년 1월 1일 00:00:00(UTC)를 기점으로 Date 객체의 시간까지 경과된 밀리초를 생성한다.

const today = new Date();

// 1970년 1월 1일 00:00:00(UTC)를 기점으로 경과된 밀리초 설정
today.setTime(86400000); // 86400000는 1day를 나타낸다.
console.log(today); // -> Fri Jan 02 1970 09:00:00 GMT+0900 (대한민국 표준시)

Date.prototype.getDay

Date 객체의 요일을 숫자로 정했는데, 일요일을 0으로 두고 시작한다.

요일 반환값
0
1
2
3
4
5
6

시계 예제

(function printNow() {
  const today = new Date();


  const dayNames = [
    '(일요일)',
    '(월요일)',
    '(화요일)',
    '(수요일)',
    '(목요일)',
    '(금요일)',
    '(토요일)'
  ];
  // getDay 메서드는 해당 요일(0 ~ 6)을 나타내는 정수를 반환한다.
  const day = dayNames[today.getDay()];


  const year = today.getFullYear();
  const month = today.getMonth() + 1;
  const date = today.getDate();
  let hour = today.getHours();
  let minute = today.getMinutes();
  let second = today.getSeconds();
  const ampm = hour >= 12 ? 'PM' : 'AM';


  // 12시간제로 변경
  hour %= 12;
  hour = hour || 12; // hour가 0이면 12를 재할당


  // 10미만인 분과 초를 2자리로 변경
  minute = minute < 10 ? '0' + minute : minute;
  second = second < 10 ? '0' + second : second;


  const now = `${year}년 ${month}월 ${date}일 ${day} ${hour}:${minute}:${second} ${ampm}`;


  console.log(now);


  // 1초마다 printNow 함수를 재귀 호출한다. 41.2.1절 "setTimeout / clearTimeout" 참고
  setTimeout(printNow, 1000);
}());