✏️ 작성자: @heerucan
📌 작성자의 한마디: "서버에서 날짜 처리 이렇게 쉬웠던 거였냐..?"
이놈 자식은 리드미에도 나와있다시피 껌 이다.
이 껌같은 녀석을 몰라서 클라한테 예쁨 받지 못하는 서버가 될 수는 없다.
이 껌같은 녀석을 몰라서 영국인이 될 수는 없다.
여하튼 이 아이는 뭐하는 녀석인가?
npm install dayjs
{ //tsconfig.json
"compilerOptions": {
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
}
}
import dayjs from 'dayjs'
import * as dayjs from 'dayjs'
import * as isLeapYear from 'dayjs/plugin/isLeapYear'
import 'dayjs/locale/ko'
dayjs.extend(isLeapYear) // use plugin
dayjs.locale('ko') // use locale
dayjs() 객체를 통해 출력을 해보면 아래와 같이 나온다.
좀 더 이쁘게 출력하고 싶으면 format() 함수를 통해서 어떤 형식으로 포맷할 지 작성해주면 된다.
dayjs().format() // 2022-07-22T00:52:07+09:00
dayjs().format(YY-MM-DD HH:mm:ss)
뒤에 붙은 +09:00 은 Timezone이다.
이 Timezone은 UTC(합정 세계시)라고 하는데 국제 표준시로 그리니치 평균시(GMT)로 불리기도 하고 런던을 기점으로 한다.
UTC는 그리고 타임존의 기준이 되는 +00:00이라고 보면 된다.
dayjs().tz('utc').format('YY-MM-DD HH:mm:ss')
22-07-21 16:18:26
dayjs().tz('Asia/Seoul').format('YY-MM-DD HH:mm:ss')
22-07-22 01:17:25
이 두 값의 차이는 UTC 기준으로 우리나라가 9시간 이 빠르기 때문에 시간이 다르게 출력된다.
근데 자스에서 Date() 객체를 출력해보면 브라우저의 UTC에 맞게 저장이 되는데, 출력할 때는 로컬 타임존에 맞게 변환되어 출력이 된다. 그런 문제를 해결하기 위해 Day.js 라이브러리를 사용하게 됐다.
긍까 좀 더 쉽게 말해보면, 서버에서 찍어보면 한국 시간대로 나오는데 클라한테 돌려보면 영국시간대로 나온다는 것임 그래서 사용하는 것임.
위에서도 언급했지만 또 다른 의미로는...
DB에 timestamp 값을 자주 저장한다.
우리는 클라한테 그 값을 가공해서 전달하는 경우가 굉장히 많은데 그 경우에
이 라이브러리를 자주 사용하게 된다.
클라는 (iOS의 경우는) 날짜를 원하는 형식으로 변경해주려면 쬠 귀찮다.
DateFormatter를 사용해서 아래처럼 좀 진짜 귀찮음
let nowDate = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm"
dateFormatter.locale = Locale(identifier:"ko_KR")
let str = dateFormatter.string(from: nowDate)
그래서 비교적 코드가 간결하게 끝나니..
클라에게 이쁨 받기에 딱 좋은 라이브러리 아닐까?! ><><
Dayjs는 추가적으로 날짜를 가지고 연산이 가능하다.
dayjs('2022-07-22').add(1, 'day').subtract(1, 'year').year(2009).toString()
2022년 7월 22일에 하루를 더하고 / 1년을 빼고 / 년도를 2009년으로 변경하겠다?
2009년 7월 23일이 나오겠지?
근데
22 Jul 2009 15:00:00 GMT
가 출력이 된다.
그 이유는 15:00:00은 로컬 타임이고 출력 시간에 한국 시간에 맞게 9시간을 더해주면 원하는 값인 2009년 7월 23일 00:00:00 GMT 가 나온다.