티스토리 뷰

30장. Date

  • UTC(Coordinated Universal Time): 국제 표준시
  • GMT(Greenwich Mean Time): 그리니치 평균시
  • KST(Korea Standard Time): 한국 표준시, UTC + 9
  • UTC와 GMT는 초의 소수점 단위에서만 차이가 나기 때문에 일상에서는 혼용되어 사용된다.
  • 기술적인 표기에는 UTC가 사용된다.
  • 현재 날짜와 시간은 JS 코드가 실행된 시스템의 시계에 의해 결정된다.

30-1. Date 생성자 함수

  • Date 객체는 내부적으로 날짜와 시간을 나타내는 정수값을 갖는다.
  • 1970년 1월 1일 00:00:00(UTC)를 기점으로 Date 객체가 나타내는 날짜와 시간까지의 밀리초를 나타낸다.
  • 예를 들어 1970년 1월 2일0시는 정수값 86,400,000(24h * 60m * 60s * 1000ms)를 갖는다.

new Date()

new Date(); 
// Sun Jun 12 2022 13:15:09 GMT+0900 (한국 표준시)

Date();
// 'Sun Jun 12 2022 13:15:28 GMT+0900 (한국 표준시)'

new Date(0);
// Thu Jan 01 1970 09:00:00 GMT+0900 (한국 표준시)

new Date(86400000); 
// Fri Jan 02 1970 09:00:00 GMT+0900 (한국 표준시)

// new Date(dateString) 
// Date.parse 메서드에 의해 해석 가능한 형식이어야 함.
new Date('May 26, 2020 10:00:00');
// Thu Mar 26 2020 10:00:00 GMT+0900

new Date('2020/03/26/10:00:00');
// Thu Mar 26 2020 10:00:00 GMT+0900

new Date(year, month[, day, hour, minute, second, millisecond])

  • 연, 월은 반드시 지정해야함.
  • Date 객체를 반환함.
  • 지정하지 않은 옵션 정보는 0 또는 1로 초기화됨
  • month는 0부터 시작
new Date(2022, 05);
// Wed Jun 01 2022 00:00:00 GMT+0900 (한국 표준시)

// 가독성이 더 좋음.
new Date('2022/06/12/13:22:00:00');
// Sun Jun 12 2022 13:22:00 GMT+0900 (한국 표준시)

30-2. Date 메서드

Date.now

  • 1970년 1월 1일 00:00:00 (UTC) 기점으로 현재 시간까지 경과한 밀리초를 숫자로 반환
Date.now();
// 1655007827703

new Date(1655007827703);
// Sun Jun 12 2022 13:23:47 GMT+0900 (한국 표준시)

Date.parse

  • 1970년 1월 1일 00:00:00 (UTC) 기점으로 인수로 전달된 지정시간의까지의 밀리초를 숫자로 반환
// UTC
Date.parse('Jan 2, 1970 00:00:00 UTC'); // 86400000

// KST
Date.parse('Jan 2, 1970 09:00:00'); // 86400000

// KST
Date.parse('1970/01/02/09:00:00'); // 86400000

Date.UTC

  • UTC를 기점으로 인수로 전달된 지정 시간까지의 밀리초를 숫자로 반환
  • new Date(year, month[, day, hour, minute, second, millisecond])와 같은 형식의 인수를 사용해야 한다.
  • 인수는 KST가 아닌 UTC로 인식된다.
  • month는 0부터 시작한다.
Date.UTC(1970, 0, 2); // 86400000
Date.UTC('1970/1/2'); // NaN

year, month, date, day, hours, minutes, milliseconds, time

// Date.prototype.setFullYear, getFullYear
new Date('2022/06/12').getFullYear(); // 2022

const today = new Date();
today.setFullYear(2200);
today.getFullYear(); // 2200

today.setFullYear(2200, 11, 11);
today.getFullYear(); // 2200

// Date.prototype.setMonth, getMonth
new Date('2022/06/12').getMonth(); // 5

const today = new Date();
today.setMonth(0);
today.getMonth(); // 0

today.setMonth(11, 26);
today.getMonth(); // 11

// Date.prototype.setDate, getDate
new Date('2022/06/12').getDate(); // 12

const today = new Date();
today.setDate(1);
today.getDate(); // 1

// Date.prototype.getDay
// 일요일 0 ~ 토요일 6
new Date('2022/06/12').getDay(); // 0

// Date.prototype.setHours, getHours
const today = new Date();
today.setHours(8);
today.getHours(); // 8

today.setHours(0, 0, 0, 0); // 00:00:00:00
today.getHours(); // 0

// Date.prototype.setMinutes, getMinutes
new Date('2022/06/12/13:44').getMinutes(); // 44

const today = new Date();
today.setMinutes(50);
today.getMinutes(); // 50

today.setMinutes(10, 0); // HH:MM:10:000
today.getMinutes(); // 10

// Date.prototype.setMilliseconds, getMilliseconds
new Date('2022/06/12/13:44:10:150').getMilliseconds(); // 150

const today = new Date();
today.setMilliseconds(123);
today.getMilliseconds(); // 123

// Date.prototype.getTime
// UTC 기점으로 Date 객체의 시간까지 경과된 밀리초 반환
new Date('2022/06/12/13:44').getTime(); // 1655009040000

const today = new Date();
today.setTime(86400000); // 1day
console.log(today); // Fri Jan 02 1970 09:00:00 GMT+0900 (한국 표준시)

toXXXString

// Date.prototype.getTimezoneOffset
// UTC와 Date객체에 지정된 locale시간과의 차이를 분 단위로 반환한다.
const today = new Date();
today.getTimezoneOffset(); // -540
today.getTimezoneOffset() / 60; // -9 

// Date.prototype.toDateString
const today = new Date('2022/06/12');
today.toString(); // 'Sun Jun 12 2022 00:00:00 GMT+0900 (한국 표준시)'
today.toDateString(); // 'Sun Jun 12 2022'

// Date.prototype.toTimeString
const today = new Date('2022/06/12/14:04');
today.toString(); // 'Sun Jun 12 2022 14:04:00 GMT+0900 (한국 표준시)'
today.toTimeString(); // '14:04:00 GMT+0900 (한국 표준시)'

// Date.prototype.toISOString
// ISO 8601 형식으로 표현하여 문자열로 반환
today.toISOString(); // '2022-06-12T05:04:00.000Z'
today.toISOString().slice(0, 10); // '2022-06-12'
today.toISOString().slice(0, 10).replace(/-/g, '') // 20220612

// Date.prototype.toLocalString
// 인수로 전달한 locale기준으로 표현하여 문자열로 반환
// 인수 생략시 브라우저가 동작중인 시스템의 locale 사용
const today = new Date('2022/06/12/14:04');
today.toLocaleString(); // '2022. 6. 12. 오후 2:04:00'
today.toLocaleString('ko-KR'); // '2022. 6. 12. 오후 2:04:00'
today.toLocaleString('en-US'); // '6/12/2022, 2:04:00 PM'
today.toLocaleString('ja-JP'); // '2022/6/12 14:04:00'

// Date.prototype.toLocalTimeString
today.toLocaleTimeString(); // '오후 2:04:00'
today.toLocaleTimeString('ko-KR'); // '오후 2:04:00'
today.toLocaleTimeString('en-US'); // '02:04:00 PM'
today.toLocaleTimeString('ja-JP'); // '14:04:00'

' > 모던 자바스크립트 딥다이브' 카테고리의 다른 글

34장. 이터러블  (2) 2022.07.08
32장. String  (0) 2022.06.12
29장. Math  (0) 2022.06.12
28장. Number  (0) 2022.06.12
37장. Set과 Map  (2) 2022.06.08