[javascript] Date setMonth 다음달 반환 이슈 해결 (월 자동 조정 기능)

Jinbro·2024년 9월 27일
0

javascript

목록 보기
15/16

배경설명

  • 오늘날짜(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 객체의 월 조정 방식으로 인한 이슈
  • 과정
    1. 8월 31일에 setMonth(당월 index + 1) 함수로 1개월 더한 값 설정
    2. javascript 는 1개월을 더한 9월 31일이 유효한 일자인지 체크
    • 유효하지 않은 경우, 다음 일자인 10월 1일로 넘겨버림
    1. getMonth() + 1 호출 시, 10 반환

해결방안

  1. 다음달 직접 계산
const thmm = Number(dateUtil.getMonth('2024-08-31'));	// 당월 (8)
return thmm === 12 ? 1 : thmm + 1;	// 9
  1. 1일 설정하여 월 조정 안 되도록 임시 조치
let d = new Date(today);

// 일시적으로 날짜를 1일로 설정
d.setDate(1);

d.setMonth(d.getMonth() + 1);

// 다시 31일로 설정 (31일이 없으면 자동으로 말일로 조정)
d.setDate(31);

return d.getMonth() + 1;

결론

  • Date 객체 setMonth 함수 활용하여 월 정보 가져올 때, 다양한 일자에 대한 테스트 필수!
profile
자기 개발 기록 저장소

0개의 댓글