Programming Language/🟨 Javascript

Date 타입과 ISO, UNIX

DarrenKwonDev 2021. 2. 17. 04:57

# 결국 js에서는 타임존 문제로 라이브러리를 쓸 수 밖에 없다는 결론. + 편의성을 위해서라도 라이브러리를 쓰는게 좋다는 의견

https://meetup.toast.com/posts/125

https://meetup.toast.com/posts/130

 

# Datereference 객체라서 == 연산 해봐야 false를 뱉는다는 설명. 다만 비교 연산은 가능

https://www.delftstack.com/ko/howto/javascript/how-to-compare-two-dates-with-javascript/

 

# Date => ISO, UTC, UNIX

ISOstring 타입이고 UNIXnumber 타입이다.

ISO와 UNIX 둘 중 어느 것도 Date 타입이 아니다.

 

new Date().toISOString()

"2019-10-11T18:56:08.984Z"

 

new Date().toUTCString() => not recommended

"Fri, 11 Oct 2019 18:56:08 GMT"

 

유닉스는 메서드가 없다. 직접 함수를 만들어 써야 한다.

Math.floor(date.getTime() / 1000);

"1344524400"

 

# UNIX, ISO => Date

UNIXDate 객체로 변환하는 메서드는 없다. UNIX는 단순 number 타입인데 있을 거라고 기대 안했다...

직접 함수를 만들어야 한다. 이 부분은 직접 검색해보자.

 

ISODate 객체로 변환하는 메서드도 없다. ISO는 단순 string 타입일 뿐이다.

파싱해서, 숫자를 짜맞추어야 한다. 역시 직접 검색해서 알아보자.

 

# ISO, 유닉스 값의 비교

위에서 보았듯, Date에서 ISO 전환은 쉽지만 역전환은 쉽지 않은 것을 볼 수 있고

UNIX는 그냥 함수를 짜서 수작업을 해줘야 하는 것을 살펴보았다.

 

안타깝게도 쿠키, LS 저장 등의 과정에서 Date 객체는 ISOUNIX 둘 중 하나로 변환되어 저장되는 경우가 많다.

여튼, 편하게 Date 객체 끼리 하듯 비교 연산자를 사용할 수 없고, 별도의 작업을 해주어야 한다.

 

시간 연산 및 비교를 위해서는 ISO를 수작업으로 파싱하던가 UNIX를 이용해 숫자로 비교해야 한다.

개인적으론 ISO를 파싱하는 것보다 UNIX로 숫자 비교를 하는 것이 훨씬 직관적이고 편하다고 생각한다.

 

# 그래서 어떻게 날짜 비교를 하는 것이 좋을까

가급적 Date 형식에서 벗어나지 않도록 하자.

그러나 벗어난다면(필시 벗어날 테지만), 날짜, 요일 등을 곧바로 사용해야 한다면 ISO를 사용하는 편이 낫다.

시간 연산이 필요해진다면 UNIX를 사용하는 것이 좋다. 그러나 ISO가 불가능한 것은 아니다. 문자열 파싱이 번거로울 뿐.

 

무거운 시간 관련 라이브러리 없이 비교하고 싶다면

초단위로 정확하지는 않지만 그나마 공수를 줄이는 방법은 다음과 같다...

 

Date => ISO 저장 => Date.parse 메서드를 활용하여 UNIX 변환 => 숫자 타입으로 비교 연산