JavaScript Date 객체
JavaScript의 Date 객체는 날짜와 시간에 관련된 메서드를 제공하는 빌트인 객체 입니다. Date 생성자로 생성된 Date 객체는 내부적으로 값을 갖는데 이 값에는 유닉스 시간(Unix time)이 사용됩니다.
- Unix Time
Unix Time은 POSIX 시간이나 Epoch 시간이라고 부르기도 합니다. 1970-01-01 00:00:00(UTC) 일시를 기준으로 현재까지의 시간을 나타내는데 JavaScript에서는 밀리초(millisecond) 단위로 나타냅니다.
- UTC/GMT
UTC(Coordinated Universal Time, 세계협정시)는 GMT(Greenwich Mean Time, 그리니치 평균시)에 기반하므로 UTC와 GMT는 초의 소숫점 단위에서만 차이가 나기 때문에 일상에서는 혼용되어 사용됩니다. 기술적인 표기에서는 UTC가 사용됩니다.
1. Date 생성자
Date 생성자를 이용하여 Date 객체 생성이 가능합니다. 생성된 Date 인스턴스는 기본적으로 현재 날짜와 시간을 나타내는 값을 갖게 됩니다. 현재 날짜와 시간이 아닌 특정한 날짜와 시간을 설정하고 싶을 경우엔 Date 생성자에 원하는 날짜와 시간을 파라미터로 전달해줘야 하는데, 이 때 전달되는 파라미터는 Date.parse() 메서드가 해석할 수 있는 형식이어야 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
let date1 = new Date(1594611296981);
console.log(date1); // Mon Jul 13 2020 12:34:56 GMT+0900 (대한민국 표준시)
let date2 = new Date('2020-07-13 12:34:56');
console.log(date2); // Mon Jul 13 2020 12:34:56 GMT+0900 (대한민국 표준시)
let date3 = new Date('Mon July 13 2020 12:34:56 GMT+0900');
console.log(date3); // Mon Jul 13 2020 12:34:56 GMT+0900 (대한민국 표준시)
let date4 = new Date('2020-07-13T12:34:56.000Z');
console.log(date4); // Mon Jul 13 2020 12:34:56 GMT+0900 (대한민국 표준시)
let date5 = new Date(2020, 6, 13, 12, 34, 56, 0);
console.log(date5); // Mon Jul 13 2020 12:34:56 GMT+0900 (대한민국 표준시)
|
cs |
- ISO8601
날짜와 시간에 관련된 데이터 교환을 다루는 국제 날짜 표준입니다. 형식은 숫자와 특정 의미를 갖는 문자('-', ':', 'T', 'W', 'Z')로 이루어져 있습니다. 다음과 같은 형태로 정의합니다.
YYYY-MM-DDTHH:mm:ss.sssZ (2020-07-13T12:34:56.000Z)
ddd, DD MMM YYYY HH:mm:ss ZZ (Mon, 13 July 2020 12:34:56 KST)
Date 전역 객체를 사용하면 인스턴스 생성없이 날짜와 시간의 결과값을 문자열로 반환합니다.
1
2
3
|
let date = Date();
console.log(typeof date); // string
console.log(date); // Mon Jul 13 2020 12:34:56 GMT+0900 (대한민국 표준시)
|
cs |
2. Date 전역 객체의 메서드
2.1. now()
now() 메서드는 1970-01-01 00:00:00(UTC) 일시를 기준으로 현재까지 경과한 시간을 밀리초로 반환합니다.
1
2
3
4
|
// Date.now()
const now = Date.now();
console.log(now); // 1594889718211
|
cs |
2.2. parse()
parse() 메서드는 1970-01-01 00:00:00(UTC) 일시를 기준으로 파라미터로 전달된 특정한 일시까지의 차이를 millisecond로 반환합니다.
1
2
3
4
5
6
7
8
9
10
|
// Date.parse(s: string)
let date1 = Date.parse('July 13, 2020 12:34:56 UTC');
console.log(date1); // 1594643696000
let date2 = Date.parse('2020-07-13T12:34:56.000Z');
console.log(date2); // 1594643696000
let date3 = Date.parse('Mon July 13 2020 12:34:56 GMT+0900');
console.log(date3); // 1594611296000
|
cs |
2.3. UTC()
UTC() 메서드는 1970-01-01 00:00:00(UTC) 일시를 기준으로 파라미터로 전달된 특정한 일시까지의 차이를 millisecond로 반환합니다. parse() 메서드와는 다르게 UTC() 메서드의 파라미터는 KST가 아닌 UTC로 인식됩니다.
또한 'new Date(year, month[, day, hour, minute, second, millisecond])' 형식의 파라미터를 사용해야 합니다.
1
2
3
4
5
6
7
|
// Date.UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number)
let date1 = Date.UTC(2020, 6, 13, 12, 34, 56, 0);
console.log(date1); // 1594643696000
let date2 = Date.UTC('2020/7/13/12:34:56');
console.log(date2); // NaN
|
cs |
3. Date 생성자의 메서드
3.1. getFullYear()
getFullYear() 메서드는 4자리 수의 연도를 반환합니다.
1
2
3
4
|
// new Date().getFullYear()
const today = new Date();
console.log(today.getFullYear()); // 2020
|
cs |
3.2. getMonth()
getMonth() 메서드는 월을 나타내는 0(1월) ~ 11(12월) 사이의 정수를 반환합니다.
1
2
3
4
|
// new Date().getMonth()
const today = new Date();
console.log(today.getMonth()); // 6
|
cs |
3.3. getDate()
getDate() 메서드는 날짜를 나타내는 1 ~ 31 사이의 정수를 반환합니다.
1
2
3
4
|
// new Date().getDate()
const today = new Date();
console.log(today.getDate()); // 13
|
cs |
3.4. getDay()
getDay() 메서드는 요일을 나타내는 0(일) ~ 6(토) 사이의 정수를 반환합니다.
1
2
3
4
|
// new Date().getDay()
const today = new Date();
console.log(today.getDay()); // 1
|
cs |
3.5. getHours()
getHours() 메서드는 시간을 나타내는 0 ~ 23 사이의 정수를 반환합니다.
1
2
3
4
|
// new Date().getHours()
const today = new Date();
console.log(today.getHours()); // 12
|
cs |
3.6. getMinutes()
getMinutes() 메서드는 분을 나타내는 0 ~ 59 사이의 정수를 반환합니다.
1
2
3
4
|
// new Date().getMinutes()
const today = new Date();
console.log(today.getMinutes()); // 34
|
cs |
3.7. getSeconds()
getSeconds() 메서드는 초를 나타내는 0 ~ 59 사이의 정수를 반환합니다.
1
2
3
4
|
// new Date().getSeconds()
const today = new Date();
console.log(today.getSeconds()); // 56
|
cs |
3.8. getMilliseconds()
getMilliseconds() 메서드는 밀리초를 나타내는 0 ~ 999 사이의 정수를 반환합니다.
1
2
3
4
|
// new Date().getMilliseconds()
const today = new Date();
console.log(today.getMilliseconds()); // 808
|
cs |
3.9. getTime()
getTime() 메서드는 1970-01-01 00:00:00(UTC) 일시를 기준으로 현재까지 경과한 시간을 밀리초로 반환합니다.
1
2
3
4
|
// new Date().getTime()
const today = new Date();
console.log(today.getTime()); // 1594961867888
|
cs |
3.10. getTimezoneOffset()
getTimezoneOffset() 메서드는 UTC와 Locale 시간의 차이를 분단위로 반환합니다.
1
2
3
4
|
// new Date().getTimezoneOffset()
const today = new Date();
console.log(today.getTimezoneOffset() / 60); // -9
|
cs |
- KST
KST(Korea Standard Time)는 UTC를 기준으로 9시간이 더해진 시간입니다. (KST = UTC + 9H)
3.11. setFullYear()
setFullYear() 메서드는 4자리 수의 연도 및 월, 일을 설정합니다.
1
2
3
4
5
6
7
8
9
|
// new Date().setFullYear(year: number, month?: number, date?: number)
const today = new Date();
today.setFullYear(2019);
console.log(today); // Wed Jul 17 2019 14:28:43 GMT+0900 (대한민국 표준시)
today.setFullYear(2018, 11, 14);
console.log(today); // Fri Dec 14 2018 14:28:43 GMT+0900 (대한민국 표준시)
|
cs |
3.12. setMonth()
setMonth() 메서드는 월을 나타내는 0 ~ 11 사이의 정수 및 일을 설정합니다.
1
2
3
4
5
6
7
8
9
|
// new Date().setMonth(month: number, date?: number)
const today = new Date();
today.setMonth(6);
console.log(today); // Fri Jul 17 2020 14:39:52 GMT+0900 (대한민국 표준시)
today.setMonth(11, 14);
console.log(today); // Mon Dec 14 2020 14:39:52 GMT+0900 (대한민국 표준시)
|
cs |
3.13. setDate()
setDate() 메서드는 날짜를 나타내는 1 ~ 31 사이의 정수를 설정합니다.
1
2
3
4
5
6
|
// new Date().setDate(date: number)
const today = new Date();
today.setDate(14);
console.log(today); // Tue Jul 14 2020 14:47:11 GMT+0900 (대한민국 표준시)
|
cs |
3.14. setHours()
setHours() 메서드는 시간을 나타내는 0 ~ 23 사이의 정수 및 분, 초, 밀리초를 설정합니다.
1
2
3
4
5
6
7
8
9
|
// new Date().setHours(hours: number, min?: number, sec?: number, ms?: number)
const today = new Date();
today.setHours(5);
console.log(today); // Fri Jul 17 2020 05:52:27 GMT+0900 (대한민국 표준시)
today.setHours(12, 34, 56, 0);
console.log(today); // Fri Jul 17 2020 12:34:56 GMT+0900 (대한민국 표준시)
|
cs |
3.15. setMinutes()
setMinutes() 메서드는 분을 나타내는 0 ~ 59 사이의 정수 및 초, 밀리초를 설정합니다.
1
2
3
4
5
6
7
8
9
|
// new Date().setMinutes(min: number, sec?: number, ms?: number)
const today = new Date();
today.setMinutes(12);
console.log(today); // Fri Jul 17 2020 14:12:20 GMT+0900 (대한민국 표준시)
today.setMinutes(34, 56, 0);
console.log(today); // Fri Jul 17 2020 14:34:56 GMT+0900 (대한민국 표준시)
|
cs |
3.16. setSeconds()
setSeconds() 메서드는 초를 나타내는 0 ~ 59 사이의 정수 및 밀리초를 설정합니다.
1
2
3
4
5
6
7
8
9
10
|
// new Date().setSeconds(sec: number, ms?: number)
const today = new Date();
today.setSeconds(34);
console.log(today.getSeconds()); // 34
today.setSeconds(56, 999);
console.log(today.getSeconds()); // 56
console.log(today.getMilliseconds()); // 999
|
cs |
3.17. setMilliseconds()
setMilliseconds() 메서드는 밀리초를 나타내는 0 ~ 999 사이의 정수를 설정합니다.
1
2
3
4
5
6
|
// new Date().setMilliseconds(ms: number)
const today = new Date();
today.setMilliseconds(999);
console.log(today.getMilliseconds()); // 999
|
cs |
3.18. setTime()
setTime() 메서드는 1970-01-01 00:00:00(UTC) 일시를 기준으로 경과한 시간을 밀리초로 설정합니다.
1
2
3
4
5
6
|
// new Date().setTime(time: number)
const today = new Date();
today.setTime(86400000);
console.log(today); // Fri Jan 02 1970 09:00:00 GMT+0900 (대한민국 표준시)
|
cs |
3.19. toDateString()
toDateString() 메서드는 읽을 수 있는 형식의 문자열로 날짜를 반환합니다.
1
2
3
4
|
// new Date().toDateString()
const today = new Date();
console.log(today.toDateString()); // Fri Jul 17 2020
|
cs |
3.20. toTimeString()
toTimeString() 메서드는 읽을 수 있는 형식의 문자열로 시간을 반환합니다.
1
2
3
4
|
// new Date().toTimeString()
const today = new Date();
console.log(today.toTimeString()); // 15:12:59 GMT+0900 (대한민국 표준시)
|
cs |
3.21. toISOString()
toISOString() 메서드는 날짜와 시간을 ISO 형식으로 반환합니다.
1
2
3
4
5
|
// new Date().toISOString()
const today = new Date();
console.log(today); // Fri Jul 17 2020 15:22:32 GMT+0900 (대한민국 표준시)
console.log(today.toISOString()); // 2020-07-17T06:22:32.753Z
|
cs |
3.22. toJSON()
toJSON() 메서드는 날짜와 시간을 ISO 형식의 JSON 문자열을 반환합니다.
1
2
3
4
5
|
// new Date().toJSON(key?: any)
const today = new Date();
console.log(today); // Fri Jul 17 2020 15:22:32 GMT+0900 (대한민국 표준시)
console.log(today.toJSON()); // 2020-07-17T06:22:32.753Z
|
cs |
4. Date 객체의 연산
Date 객체는 생성된 인스턴스에 대한 각각의 참조값을 가지고 있기 때문에 == 연산자로 값의 비교가 불가능합니다. 다음과 같이 valueOf() 또는 getTime() 메서드를 사용하여 primitive 값으로 비교가 가능합니다. Date 객체에 사용한 valueOf() 메서드의 경우 Unix Time 정수를 반환합니다.
1
2
3
4
5
6
7
8
9
10
11
|
const date1 = new Date('2020-07-01');
const date2 = new Date('2020-07-02');
const dateA = new Date('2020-07-03');
const dateB = new Date('2020-07-03');
console.log(date1.valueOf() <= date2.valueOf()); // true
console.log(date1.getTime() <= date2.getTime()); // true
console.log(dateA == dateB); // false
console.log(dateA.getTime() == dateB.getTime()); // true
|
cs |
이상으로 JavaScript Date 객체에 대해 알아봤습니다.
※ Reference
- poiemaweb.com, 날짜와 시간을 위한 Date 객체, https://poiemaweb.com/js-date
- medium.com/@pks2974, JavaScript 와 Date 날짜, https://medium.com/@pks2974/javascript-%EC%99%80-date-%EB%82%A0%EC%A7%9C-cf638c05f8f3
- ko.wikipedia.org, 유닉스 시간, https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%89%EC%8A%A4_%EC%8B%9C%EA%B0%84
- ko.wikipedia.org, 협정 세계시, https://ko.wikipedia.org/wiki/%ED%98%91%EC%A0%95_%EC%84%B8%EA%B3%84%EC%8B%9C
- ko.wikipedia.org, ISO 8601, https://ko.wikipedia.org/wiki/ISO_8601