배경설명
- 오늘날짜(YYYY-MM-DD) 기준 다음달 월(month) 반환 필요
ASIS
- Date 객체 setMonth 활용
- 샘플
- 2024-07-31 => 8
- 2024-08-30 => 9
- 2024-08-31 => 10 (이슈! 9가 아닌 10이 반환...)
let d = new Date(today);
d.setMonth(d.getMonth() + 1);
return d.getMonth() + 1;
원인
- 요약: javascript Date 객체의 월 조정 방식으로 인한 이슈
- 과정
- 8월 31일에
setMonth(당월 index + 1)
함수로 1개월 더한 값 설정
- javascript 는 1개월을 더한 9월 31일이 유효한 일자인지 체크
- 유효하지 않은 경우, 다음 일자인 10월 1일로 넘겨버림
getMonth() + 1
호출 시, 10 반환
해결방안
- 다음달 직접 계산
const thmm = Number(dateUtil.getMonth('2024-08-31'));
return thmm === 12 ? 1 : thmm + 1;
- 1일 설정하여 월 조정 안 되도록 임시 조치
let d = new Date(today);
d.setDate(1);
d.setMonth(d.getMonth() + 1);
d.setDate(31);
return d.getMonth() + 1;
결론
- Date 객체 setMonth 함수 활용하여 월 정보 가져올 때, 다양한 일자에 대한 테스트 필수!