Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ลดวันที่ลง 1 วันใน JavaScript: Date.setDate()


การลด/เพิ่มวันในอ็อบเจกต์ Date ทำได้ง่ายด้วย setDate() ร่วมกับ getDate() โดย JavaScript จัดการวันที่ล้น (overflow) อัตโนมัติ เช่น 1 มีนาคม - 1 วัน = 28/29 กุมภาพันธ์

ตัวอย่างโค้ด

<!DOCTYPE html>
<html lang="th">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>ลดวันที่ 1 วัน</title>
  <style>
    body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; }
    .result, .sample { font-size: 20px; font-weight: 500; color: rebeccapurple; }
  </style>
</head>
<body>
  <h1>JavaScript: ลดวันที่ลง 1 วัน</h1>
  <div class="sample"></div>
  <div style="color: green;" class="result"></div>
  <button class="Btn">ลด 1 วัน</button>
  <h3>กดปุ่มเพื่อลดวันที่ปัจจุบันลง 1 วัน</h3>
  <script>
    const resEle = document.querySelector(".result");
    const sampleEle = document.querySelector(".sample");
    const date = new Date();
    sampleEle.textContent = "วันนี้: " + date.toLocaleDateString("th-TH");
    document.querySelector(".Btn").addEventListener("click", () => {
      date.setDate(date.getDate() - 1);
      resEle.textContent = "วันที่ใหม่: " + date.toLocaleDateString("th-TH");
    });
  </script>
</body>
</html>

ผลลัพธ์

ลดวันที่ลง 1 วันใน JavaScript: Date.setDate()

เมื่อกดปุ่ม "ลด 1 วัน":

ลดวันที่ลง 1 วันใน JavaScript: Date.setDate()

การจัดการวันที่อื่นๆ

const date = new Date();

// เพิ่ม/ลด วัน
date.setDate(date.getDate() + 7);   // +7 วัน
date.setDate(date.getDate() - 30);  // -30 วัน (จัดการข้ามเดือน/ปีอัตโนมัติ)

// เพิ่ม/ลด เดือน (0-11)
date.setMonth(date.getMonth() + 1); // +1 เดือน
date.setMonth(date.getMonth() - 1); // -1 เดือน

// เพิ่ม/ลด ปี
date.setFullYear(date.getFullYear() + 1);

// เพิ่ม/ลด ชั่วโมง/นาที/วินาที/มิลลิวินาที
date.setHours(date.getHours() + 2);
date.setMinutes(date.getMinutes() + 30);

// ใช้ getTime() + milliseconds (คำนวณแม่นยำ)
const oneDay = 24 * 60 * 60 * 1000;
const tomorrow = new Date(date.getTime() + oneDay);
const yesterday = new Date(date.getTime() - oneDay);

ฟังก์ชันช่วยเหลือ (Helper Functions)

// เพิ่มวัน (immutable - คืน Date ใหม่)
function addDays(date, days) {
  const result = new Date(date);
  result.setDate(result.getDate() + days);
  return result;
}

// ความแตกต่างระหว่าง 2 วันที่ (วัน)
function daysDiff(date1, date2) {
  const diff = Math.abs(date1.getTime() - date2.getTime());
  return Math.floor(diff / (1000 * 60 * 60 * 24));
}

// เริ่มต้นวัน (00:00:00.000)
function startOfDay(date) {
  const d = new Date(date);
  d.setHours(0, 0, 0, 0);
  return d;
}

// สิ้นสุดวัน (23:59:59.999)
function endOfDay(date) {
  const d = new Date(date);
  d.setHours(23, 59, 59, 999);
  return d;
}

⚠️ ข้อควรระวัง

  • Date แบบ mutable — setDate() เปลี่ยนอ็อบเจกต์เดิม ใช้ new Date(date) คัดลอกก่อนถ้าต้องการ immutable
  • เวลาโซน (Timezone) — getDate() ใช้ local time ใช้ getUTCDate() สำหรับ UTC
  • Daylight Saving Time — การ +1 วันอาจไม่เท่ากับ 24 ชั่วโมงพอดีในวันที่เปลี่ยน DST
  • พิจารณาใช้ Library (date-fns, Luxon, Day.js) สำหรับงานวันที่ซับซ้อน