Nest.js/TypeOrm

TypeOrm과 js-joda를 이용한 Date타입 대신 LocalDateTime 타입 사용하기

Dev갱이 2024. 7. 6. 20:40
728x90

js-joda에서 제공 하는 타입은 다음과 같다.

  • LocalDate : 년,월,일 타입
  • LocalTime : 분,초 타입
  • LocalDateTime : 년,월,시,분,초 타입
  • ZonedDateTime: joda/timezone과 함께 사용하며 특정 국가의 timezone에 따른 타입
이외에 다른 기능들은 공식문서에 설명이 되어 있다.

 

@js-joda/core 라이브러리를 설치 한다.

 

TypeOrm의 column 데코레이터의 transformer 프로퍼티와 ValueTransformer를 이용하여 js-joda를 이용하여 날짜 데이터 타입을 보다 효율적으로 다룰 수 있다.

js-joda에서 Convert from/ to native js 부분을 참고

 

 

  • utils/convert-date-time.ts

 

  • transformer/local-date-time.transformer.ts

 

  • test.entity.ts

 

  • test.entity.ts

오늘날짜보다 이전인 orderDateTime 가져오는 테스트 메서드

 

결론적으로 JS의 Date타입 대신 js-joda를 사용 했을때 다음과 같은 이점을 얻을 수 있다.

 

  1. 불변성을 가지는 Date객체를 사용할 수 있다.
  2. LocalDateTimeTransformer를 이용하여 저장할때는 JS Date객체로 자동 변환해서 저장하고 가져올때는 LocalDateTime 타입으로 가져온다.
  3. repository에서 가져온 필드는 LocalDateTime 타입이여서 js-joda에서 제공하는 다양한 메서드들을 사용 할 수 있다.

 

  • find한 orderDateTime을 활용하는 예제

 

orderDateTime에 1달전의 monthValue값을 가져오면 6이 나오는걸 알 수 있다. 이처럼 js-joda에서 제공해주는 메서드로 날짜 데이터를 가공하는게 쉬워진다.

 

 

 

Reference

- (https://jojoldu.tistory.com/600)

- (https://www.npmjs.com/package/@js-joda/core)

- (https://js-joda.github.io/js-joda/manual/convert-native.html#convert-from-js-joda-temporal-to-a-date)

728x90