Self-Study/Javascript

[Javascript] Date 타입 데이터 관리

Raadian 2023. 2. 4. 14:11

References

https://www.youtube.com/watch?v=CSWc0HYjxEs

https://www.ibm.com/docs/ko/rtw/9.0.0?topic=reference-formatting-parsing-date-time-patterns

https://ohgyun.com/416

https://marsland.tistory.com/530

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Intl

https://tc39.es/proposal-temporal/docs/

 

 

개요

Javascript의 경우 Java와 흡사한 문법이 많은 언어이다.

그 중 하나가 Date 타입인데, 이 언어가 생긴 뒤로 날짜 관련 데이터 사용이 어떻게 변화했는지 알아보자.

 

 

new Date()

보통 일반적으로 Date 타입을 쓴다면 사용하게 되는 과정으로 Javascript가 생긴 이래로 가장 오래 사용된 문법이다.

// RFC 형식 시간으로 날짜 가져오기
let date1 = new Date(); // Sat Feb 04 2023 12:22:15 GMT+0900 (한국 표준시)
date1.getFullYear(); // 2023
date1.getMonth() + 1; // 2
date1.getDate(); // 4
date1.getTime(); // 1675480935089
💡 RFC 822 : RFC(국제 인터넷 표준화 기구)에서 정한 데이터 규격으로, 자바스크립트 상에선 현지 시간으로 출력이 된다.
// ISO 형식 시간으로 날짜 가져오기
let date1 = new Date().toISOString(); 
console.log(date1); // 2023-02-04T03:22:15.089Z
💡 ISO 8601 : ISO(국제 표준화 기구)에서 정한 데이터 규격으로, 자바스크립트 상에선 국제협정시(UTC)를 기준으로 출력이 된다.

 

 

moment.js

Javascript에서 많이 사용 중인 외부 날짜 라이브러리로, 기존 new Date()와 달리 보다 다양한 기능들을 지원한다.

let now = moment().format();
console.log(now); // YYYY-MM-DDTHH:MM:SS+09:00

다만, moment의 경우 Javascript가 지금처럼 자리 잡히기 이전에 만들어진 체계이기 때문에 그만큼 오래된 방식이고 최신 Tree Shaking*에 적합하지 않아 최근 사이트에 맞게 적용하기 어려운 형태이다.

따라서 이러한 이유들로 인해 2020년 10월 6월 이후로 업데이트가 되지 않아 사후지원이 중단되었다.

💡 Tree Shaking : 모듈을 번들링 할 때 사용하지 않는 코드를 정리하여 최적화 하는 과정

 

 

Intl

ECMAScript에서 정한 Javascript 내장 라이브러리로, 날짜 출력을 비롯하여 문자, 시간, 날짜비교까지 지원한다.

let datetime = now Date();

let convertIntl = new Intl.DateTimeFormat('kr').format(datetime);
console.log(convertIntl); // YYYY. M. D. (한국 날짜 형식으로 출력)

let customIntl = new Intl.DateTimeFormat('kr', { dateStyle: 'full', timeStyle: 'full' }).format(datetime);
console.log(customIntl); // 원하는 날짜 형식으로 출력
let dDay = now Intl.RelativeTimeFormat().format(-10, 'days');
console.log(dDay); // 지정된 날짜로 부터 시간차 출력

 

 

Temporal

향 후, Javascript에 내장 적용 예정인 라이브러리로 최신화 된 Javascript의 생태계에 맞게 다양한 날짜 기능을 제공한다.

let nowDateTime = Temporal.Now.plainDateTimeISO();
console.log(nowDateTime.toString()); // YYYY-MM-DDTHH:MM:SS:ms

let nowDate = Temporal.Now.plainDateISO();
console.log(nowDate.toString()); // YYYY-MM-DD

let nowTime = Temporal.Now.plainTimeISO();
console.log(nowTime.toString()); // HH:MM:SS:ms

let nowCustomDate = new Temporal.PlainDate(2023, 2, 4);
console.log(nowCustomDate.toString()); // 2023-02-04
let now = Temporal.Now.plainDateTimeISO();

now = now.add({ days: 10, months: 3, years: 1 });
console.log(now); // 현재 날짜에 수치를 더함

now = now.subtract({ days: 10, months: 3, years: 1 }); 
console.log(now); // 현재 날짜에 수치를 뺌

now = now.round({ smallestUnit: 'hour', roundingMode: 'floor' });
console.log(now); // 현재 날짜에 반올림
let dDay = Temporal.PlainDateTime.from('2023-12-31T23:59:59');
let now = Temporal.Now.plainDateTimeISO();

let result = dDay.since(now); // 기준날짜에서 현재날짜 시간차 계산