Phương thức setMonth() thiết lập tháng (0-11) cho đối tượng Date theo thời gian địa phương, có thể kèm ngày. Trả về timestamp mới. Lưu ý: Tháng là 0-based.
Cú pháp
dateObj.setMonth(monthIndex[, day])
monthIndex: Tháng 0-based (0 = Tháng 1, 11 = Tháng 12)day: Tùy chọn, ngày trong tháng (1-31)- Trả về: Timestamp mới (number)
Ví dụ cơ bản
const date = new Date('1989-09-26T05:04:25.096Z');
console.log("Trước:", date.toUTCString()); // Tue, 26 Sep 1989 05:04:25 GMT
date.setMonth(9); // Tháng 10 (0-based)
console.log("Sau:", date.toUTCString()); // Thu, 26 Oct 1989 05:04:25 GMT
Set tháng + ngày
const date = new Date('1989-09-26T05:04:25.096Z');
date.setMonth(8, 1); // 1/9 (tháng 9, ngày 1)
console.log(date.toUTCString()); // Fri, 01 Sep 1989 05:04:25 GMT
Thiếu tháng khi tạo Date
const date = new Date('1989 05:04:25.096'); // Chỉ năm
date.setMonth(8); // Tháng 9
console.log(date.toISOString()); // 1989-09-01T05:04:25.000Z (ngày mặc định 1)
Ngày hiện tại set tháng
const date = new Date();
date.setMonth(8); // Tháng 9
console.log(date.toISOString()); // Giữ ngày/năm/giờ hiện tại, đổi tháng
Auto-normalize vượt phạm vi
const date = new Date('2024-01-15');
date.setMonth(14); // 14 - 12 = 2 -> Tháng 3 năm sau
console.log(date.toISOString()); // 2025-03-15T00:00:00.000Z
date.setMonth(-1); // Lùi 1 tháng -> Tháng 12 năm trước
console.log(date.toISOString()); // 2024-12-15T00:00:00.000Z
Xử lý ngày cuối tháng
const date = new Date('2024-01-31'); // 31/1
date.setMonth(1); // Tháng 2/2024 (có 29 ngày)
console.log(date.toISOString()); // 2024-02-29T00:00:00.000Z (auto adjust 31->29)
date.setFullYear(2023); // 2023 không nhuận
console.log(date.toISOString()); // 2023-02-28T00:00:00.000Z (adjust 29->28)
Lưu ý
- Tháng 0-based (0-11) - cạm bẫy phổ biến
- Vượt phạm vi auto-normalize (tràn sang năm)
- Ngày vượt quá số ngày trong tháng mới -> auto adjust đến ngày cuối tháng
- Làm thay đổi object Date gốc
- Khác với
setUTCMonth()(UTC time) - Cặp đôi với
getMonth()