JavaScript Date set methods let you change the year, month, day, hours, or milliseconds on an existing Date instance. Whenever you pass an out-of-range value like 35 days, JavaScript automatically rolls over into the next month or year.
setFullYear(year, month?, day?): Sets the four-digit year and optionally the month (0–11) and day (1–31).setMonth(month, day?): Updates the month index (0–11).setDate(day): Sets the day of the month (1–31), making it easy to add or subtract days with d.setDate(d.getDate() + 7).setHours(h, m?, s?, ms?): Updates local hours (0–23) and optionally minutes, seconds, and milliseconds.Because set* methods mutate the Date object directly, clone the Date first with new Date(baseDate) when you need to keep the original value intact.
function addDays(baseDate, days) {
const copy = new Date(baseDate.getTime()); // Keep original untouched
copy.setDate(copy.getDate() + days);
return copy;
}
const invoiceDate = new Date("2026-01-29T12:00:00Z");
const dueDate = addDays(invoiceDate, 5); // Rolls cleanly into February!
console.log("Invoice:", invoiceDate.toISOString().slice(0, 10));
console.log("Due date:", dueDate.toISOString().slice(0, 10));
Calling setMonth(1) (February) on January 31 tries to set February 31, which rolls forward into March 3. If you want the last day of the target month, handle day clamping explicitly or use setDate(0) after advancing one month.
Date parameter: Calling date.setDate(...) directly changes the caller's variable too. Clone with new Date(date.getTime()) inside helper functions.setMonth() on the 31st day: Adding 1 month to Jan 31 skips February completely and lands in March.24 hours with setHours(h + 24) can differ from setDate(d + 1) on DST transition days.setDate() and setHours() return?They return the updated numeric timestamp in milliseconds, while also mutating the Date object in place.
Pass 0 as the day to the next month: new Date(2026, 2, 0).getDate() returns 28 (the last day of February 2026).
setUTC* methods exist as well?Yes, methods like setUTCDate() and setUTCHours() update the date using UTC instead of the local system timezone.
Sign in to track your learning journey, earn industry-recognized certificates, and join our elite developer community.
Quick Access With
Experiment with the code from this lesson in our interactive playground.
You've completed this section! Take a quick 5-question quiz to check your understanding.