memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

moment.js

moment.js는 날짜와 시간을 간편하게 다룰 수 있도록 도와주는 라이브러리이다. 프로젝트를 하면서 거의 필수적으로 사용하는 라이브러리

 

moment.js의 자세한 내용은 아래 링크 참고

 

Moment.js | Home

Format Dates moment().format('MMMM Do YYYY, h:mm:ss a'); moment().format('dddd'); moment().format("MMM Do YY"); moment().format('YYYY [escaped] YYYY'); moment().format(); Relative Time moment("20111031", "YYYYMMDD").fromNow(); moment("20120620", "YYYYMMDD"

momentjs.com

 

버그 내용

기간을 표현하기 위해 시작일과 종료일을 설정하는 도중에 예상과 다른 결과가 나오는 버그? 를 발견했다. (버그가 아니고 의도한 것일 수도 있음)

 

아래와 같이 시작일을 현재 시간, 종료일을 한달 뒤로 설정했을때, 나의 예상 결과는 2021-12-16, 2022-01-16로 나올 것으로 예상했다.

하지만, 예상했던 결과와 다르게 2022-01-16, 2022-01-16 으로 now와 afterMonth 값이 동일하게 나왔다.

const DATE_FORMAT = "YYYY-MM-DD";

const now = moment(); // 현재 시간
const afterMonth = now.add(1, "month"); // 현재시간으로부터 한달 뒤

console.log(now.format(DATE_FORMAT), afterMonth.format(DATE_FORMAT));
// expect: 2021-12-16 2022-01-16
// result: 2022-01-16 2022-01-16

 

 

해결 방법

 

2가지 방법으로 해결이 가능한데,

 

방법 1. 사용할때마다 moment()를 새로 호출해서 사용한다.

const DATE_FORMAT = "YYYY-MM-DD";

const now = moment();
// const afterMonth = now.add(1, "month"); // 변경 전
const afterMonth = moment().add(1, "month"); // 변경 후

console.log(now.format(DATE_FORMAT), afterMonth.format(DATE_FORMAT));
// expect: 2021-12-16 2022-01-16
// result: 2021-12-16 2022-01-16

 

방법 2. 또는 미세한 차이도 용납할 수 없는 경우 Date 객체를 변수에 담아두고 moment()를 이용한다.

const DATE_FORMAT = "YYYY-MM-DD";

const nowDate = new Date(); // 현재 시간
const now = moment(nowDate);
const afterMonth = moment(nowDate).add(1, "month");

console.log(now.format(DATE_FORMAT), afterMonth.format(DATE_FORMAT));
// expect: 2021-12-16 2022-01-16
// result: 2021-12-16 2022-01-16

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!