자바스크립트에서 날짜 관련 핸들링은 항상 어렵다.
월단위로 데이터를 검색하는 경우 검색 조건 통제를 위한 자바스크립트로 월단위를 더하는 방식을 알아본다.
// 한자리면 0붙이기
function pad(n) {
return n < 10 ? '0'+n : ''+n
}
// 월 더하기
function addMonth(d, n) {
d.setMonth(d.getMonth() + n);
return d.getFullYear() + '/' + pad(d.getMonth()+1) + '/' + pad(d.getDate());
}
// 실행
console.log(addMonth(new Date('2022/01/01'), 1)); // '2022/02/01'
console.log(addMonth(new Date('2022/01/15'), 1)); // '2022/02/15'
console.log(addMonth(new Date('2022/01/31'), 1)); // '2022/03/03' ??????????????
이는 자바스크립트에서 setMonth 함수로 월을 셋팅하면 일은 그대로고 월만 변경 되기 때문에
2022/02/31 이 된다. 2월은 28일 까지 있으므로 자바스크립트 자체에서 2월28일에서 3일을 더해 3월3일이 되는 것이다.
이에 대한 예외 처리를 해줘야 한다.
// 1자리면 0 붙이기
function pad(n) {
return n < 10 ? '0'+n : ''+n
}
// 윤년인지여부
function isLeapYear(year) {
return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));
}
// 해당년월의 말일 구하기
function getLastDate(year, month) {
return [31, (isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
}
// 월 더하기
function addMonth(d, n) {
var date = d.getDate();
d.setDate(1); // 1일로 설정
d.setMonth(d.getMonth() + n); // 개월수 더하기
//d.setDate(d.getDate() - 1);
return d.getFullYear() + '/' + pad(d.getMonth()+1) + '/' + pad(Math.min(date, getLastDate(d.getYear(), d.getMonth())));
}
// 실행
console.log(addMonth(new Date('2022/01/01'), 1)); // '2022/02/01'
console.log(addMonth(new Date('2022/01/15'), 1)); // '2022/02/15'
console.log(addMonth(new Date('2022/01/31'), 1)); // '2022/02/28'
제대로 나오는거 같다.
'프론트 프로그램 > javascript' 카테고리의 다른 글
iframe안에서 자신의 iframe 선택하기, iframe 높이 조절하기 (0) | 2022.01.05 |
---|---|
Javascript 주민번호, 주민등록번호 체크 (0) | 2021.10.21 |