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'