Phương thức setDate() thiết lập ngày trong tháng (1-31) cho đối tượng Date theo thời gian địa phương, trả về timestamp mới.
Cú pháp
dateObj.setDate(day)
day: Ngày trong tháng (1-31). Giá trị 0 hoặc âm có ý nghĩa đặc biệt- Trả về: Timestamp mới (number)
Ví dụ cơ bản
const date = new Date('1989-09-26T12:04:25.096');
console.log("Trước:", date.toUTCString()); // Tue, 26 Sep 1989 06:34:25 GMT
date.setDate(1);
console.log("Sau:", date.toUTCString()); // Fri, 01 Sep 1989 06:34:25 GMT
Kỹ thuật đặc biệt: setDate(0) = ngày cuối tháng trước
const date = new Date('1989-08-23');
date.setDate(0);
console.log(date.toDateString()); // Mon Jul 31 1989 (31/7/1989)
// Tìm ngày cuối tháng bất kỳ
function getLastDayOfMonth(year, month) { // month 0-based
return new Date(year, month + 1, 0).getDate();
}
console.log(getLastDayOfMonth(2024, 1)); // 29 (Tháng 2/2024 - năm nhuận)
console.log(getLastDayOfMonth(2023, 1)); // 28 (Tháng 2/2023)
Vượt phạm vi - Auto normalize
const date = new Date('2024-01-15');
date.setDate(45); // 45 - 31 = 14 -> 14/2/2024
console.log(date.toISOString()); // 2024-02-14T00:00:00.000Z
date.setDate(-5); // Lùi 5 ngày từ 1/1 -> 27/12 năm trước
console.log(date.toISOString()); // 2023-12-27T00:00:00.000Z
Ứng dụng
- Tìm ngày cuối tháng:
new Date(year, month+1, 0).getDate() - Tính ngày hết hạn:
date.setDate(date.getDate() + 30) - Lặp qua các ngày trong tháng
- Adjust ngày sinh nhật năm nay
Lưu ý
- Tham số
daylà 1-based (1-31) 0= ngày cuối tháng trước,-1= ngày倒数第二 tháng trước, v.v.- Giá trị > số ngày trong tháng -> tràn sang tháng sau
- Làm thay đổi object Date gốc
- Có phiên bản UTC:
setUTCDate()