การลด/เพิ่มวันในอ็อบเจกต์ 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 วัน":

การจัดการวันที่อื่นๆ
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) สำหรับงานวันที่ซับซ้อน