자바스크립트에서 특정 날짜에 하루 또는 여러 날을 더하고 싶을 때, 별도의 외부 라이브러리(moment.js, date-fns 등)를 설치하지 않아도 setDate() 메서드만으로 충분히 처리할 수 있습니다. Date 객체의 프로토타입에 함수를 추가해 두면, 프로젝트 어디서든 간편하게 재사용할 수 있습니다.
구현 예제
Date.prototype.addDays = function(days) {
let d = new Date(this.valueOf());
d.setDate(d.getDate() + days);
return d;
}
let date = new Date();
console.log(date.addDays(1)); // 내일 날짜가 출력됩니다코드 설명
위 코드의 동작 원리를 단계별로 살펴보겠습니다.
1. 새로운 Date 객체 생성: new Date(this.valueOf())를 사용하여 원본 날짜를 변경하지 않는 복사본을 만듭니다. 이렇게 하면 기존 날짜 객체가 의도치 않게 수정되는 부작용(side effect)을 방지할 수 있습니다.
2. setDate로 날짜 더하기: d.setDate(d.getDate() + days)는 현재 '일(day)' 값에 원하는 일수를 더합니다. 만약 더한 결과가 해당 월의 마지막 날을 초과하더라도, 자바스크립트가 자동으로 다음 달로 넘어가며 올바른 날짜를 계산해 줍니다. 예를 들어 1월 31일에 하루를 더하면 2월 1일이 됩니다.
3. 결과 반환: 계산된 새로운 Date 객체를 반환합니다.
활용 예시
이 함수는 음수 값을 전달하면 과거 날짜를 구하는 데에도 활용할 수 있습니다.
let today = new Date(); console.log(today.addDays(7)); // 일주일 후 console.log(today.addDays(-3)); // 사흘 전
주의 사항
Date.prototype을 직접 확장하는 방식은 코드가 간결하다는 장점이 있지만, 다른 라이브러리와 충돌하거나 팀 프로젝트에서 혼란을 줄 수 있습니다. 이 경우 프로토타입을 수정하지 않고 일반 함수 형태로 작성하는 것이 더 안전합니다.
function addDays(date, days) {
const d = new Date(date);
d.setDate(d.getDate() + days);
return d;
}정리하면, 자바스크립트의 기본 setDate() 메서드를 활용하면 어떤 라이브러리도 설치하지 않고 월 경계, 윤년 등 모든 경우에 정확하게 날짜를 더하거나 뺄 수 있습니다.