Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Phương thức Date.setDate() trong JavaScript

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ố day là 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()