블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
moment.js
moment.js는 날짜와 시간을 간편하게 다룰 수 있도록 도와주는 라이브러리이다. 프로젝트를 하면서 거의 필수적으로 사용하는 라이브러리
moment.js의 자세한 내용은 아래 링크 참고
버그 내용
기간을 표현하기 위해 시작일과 종료일을 설정하는 도중에 예상과 다른 결과가 나오는 버그? 를 발견했다. (버그가 아니고 의도한 것일 수도 있음)
아래와 같이 시작일을 현재 시간, 종료일을 한달 뒤로 설정했을때, 나의 예상 결과는 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
반응형
'Frontend > HTML, CSS, JS' 카테고리의 다른 글
HTML의 기본 문법(속성, 값, 부모/자식 요소, 빈 태그) (0) | 2021.12.21 |
---|---|
html 문법과 태그의 종류 (0) | 2021.12.16 |
웹(Web)에서 HTML, CSS, JS의 역할 (0) | 2021.10.27 |
CSS를 이용하여 이미지를 정사각형 모양으로 자르기 (0) | 2021.07.25 |
Javascript의 forEach, map, filter 함수 (0) | 2020.11.09 |