เมธอด AddDays() ของ DateTime ใช้บวกหรือลบจำนวนวันจากวันที่ คืนค่า DateTime ใหม่ (Immutable) การใส่ค่าบวกจะได้วันที่ในอนาคต ค่าลบจะได้วันที่ในอดีต
รูปแบบการใช้งาน
DateTime tomorrow = DateTime.Today.AddDays(1); // วันพรุ่งนี้
DateTime yesterday = DateTime.Today.AddDays(-1); // วันเมื่อวาน
DateTime nextWeek = DateTime.Today.AddDays(7); // สัปดาห์หน้า
โค้ดตัวอย่างสมบูรณ์
using System;
public class Demo
{
public static void Main()
{
DateTime today = DateTime.Today;
Console.WriteLine($"วันนี้: {today:yyyy-MM-dd (dddd)}");
// วันพรุ่งนี้
DateTime tomorrow = today.AddDays(1);
Console.WriteLine($"วันพรุ่งนี้: {tomorrow:yyyy-MM-dd (dddd)}");
// วันเมื่อวาน
DateTime yesterday = today.AddDays(-1);
Console.WriteLine($"วันเมื่อวาน: {yesterday:yyyy-MM-dd (dddd)}");
// อีก 7 วัน (สัปดาห์หน้า)
DateTime nextWeek = today.AddDays(7);
Console.WriteLine($"อีก 7 วัน: {nextWeek:yyyy-MM-dd (dddd)}");
// อีก 30 วัน (ประมาณเดือนหน้า)
DateTime nextMonth = today.AddDays(30);
Console.WriteLine($"อีก 30 วัน: {nextMonth:yyyy-MM-dd (dddd)}");
// เพิ่ม/ลบหลายวันพร้อมกัน
Console.WriteLine("\n--- เพิ่ม/ลบหลายวัน ---");
int[] offsets = { -30, -7, -1, 0, 1, 7, 30, 365 };
foreach (int offset in offsets)
{
DateTime target = today.AddDays(offset);
string label = offset switch
{
-30 => "~1 เดือนก่อน",
-7 => "1 สัปดาห์ก่อน",
-1 => "เมื่อวาน",
0 => "วันนี้",
1 => "พรุ่งนี้",
7 => "1 สัปดาห์หน้า",
30 => "~1 เดือนหน้า",
365 => "1 ปีหน้า",
_ => $"{offset} วัน"
};
Console.WriteLine($" {label,12}: {target:yyyy-MM-dd}");
}
}
}
ผลลัพธ์ (สมมติวันนี้ 31 ธันวาคม 2024)
วันนี้: 2024-12-31 (Tuesday)
วันพรุ่งนี้: 2025-01-01 (Wednesday)
วันเมื่อวาน: 2024-12-30 (Monday)
อีก 7 วัน: 2025-01-07 (Tuesday)
อีก 30 วัน: 2025-01-30 (Thursday)
--- เพิ่ม/ลบหลายวัน ---
~1 เดือนก่อน: 2024-12-01
1 สัปดาห์ก่อน: 2024-12-24
เมื่อวาน: 2024-12-30
วันนี้: 2024-12-31
พรุ่งนี้: 2025-01-01
1 สัปดาห์หน้า: 2025-01-07
~1 เดือนหน้า: 2025-01-30
1 ปีหน้า: 2025-12-31
เมธอด Add* อื่นๆ ที่เกี่ยวข้อง
| เมธอด | หน่วย | ตัวอย่าง |
|---|---|---|
AddYears(int) | ปี | dt.AddYears(1) - ปีหน้า เดือน/วันเดียวกัน |
AddMonths(int) | เดือน | dt.AddMonths(1) - เดือนหน้า (จัดการวันสุดเดือนอัตโนมัติ) |
AddDays(double) | วัน (รองรับทศนิยม) | dt.AddDays(1.5) - 1.5 วัน |
AddHours(double) | ชั่วโมง | dt.AddHours(3) |
AddMinutes(double) | นาที | dt.AddMinutes(30) |
AddSeconds(double) | วินาที | dt.AddSeconds(30) |
AddMilliseconds(double) | มิลลิวินาที | dt.AddMilliseconds(500) |
Add(TimeSpan) | TimeSpan | dt.Add(TimeSpan.FromDays(1)) |
การใช้งานจริง: คำนวณวันครบรอบ/วันหมดอายุ
public class DateCalculator
{
public static DateTime GetNextBirthday(DateTime birthDate)
{
DateTime today = DateTime.Today;
DateTime nextBirthday = new DateTime(today.Year, birthDate.Month, birthDate.Day);
if (nextBirthday < today)
nextBirthday = nextBirthday.AddYears(1);
return nextBirthday;
}
public static DateTime GetExpiryDate(DateTime startDate, int daysValid)
{
return startDate.AddDays(daysValid).Date; // ตัดเวลาออก
}
public static int DaysUntil(DateTime targetDate)
{
return (int)(targetDate.Date - DateTime.Today).TotalDays;
}
}
// ใช้งาน
DateTime birthday = new DateTime(1990, 5, 15);
DateTime next = DateCalculator.GetNextBirthday(birthday);
int daysLeft = DateCalculator.DaysUntil(next);
Console.WriteLine($"วันเกิดครั้งหน้า: {next:yyyy-MM-dd} (อีก {daysLeft} วัน)");
ข้อควรระวัง
AddDays()คืนค่าDateTimeใหม่ - ตัวแปรเดิมไม่เปลี่ยน (Immutable)- รองรับค่าทศนิยม:
AddDays(0.5)= 12 ชั่วโมง - จัดการข้ามเดือน/ปีอัตโนมัติ (31 ธ.ค. + 1 วัน = 1 ม.ค. ปีหน้า)
- จัดการปีอธิกสุรทินอัตโนมัติ (28 ก.พ. + 1 วัน = 29 ก.พ. ในปีอธิกสุรทิน)
- สำหรับ "เดือนหน้า" ควรใช้
AddMonths(1)แทนAddDays(30)เพื่อความแม่นยำ - เวลา (Time Component) จะคงอยู่ - ใช้
.Dateเพื่อตัดเวลาออก