ใช้เมธอด AddDays() กับค่าลบเพื่อคำนวณวันที่ในอดีต ตัวอย่างเช่น AddDays(-1) สำหรับวันเมื่อวาน AddDays(-7) สำหรับสัปดาห์ก่อน
รูปแบบการใช้งาน
DateTime yesterday = DateTime.Today.AddDays(-1);
DateTime lastWeek = 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 yesterday = today.AddDays(-1);
Console.WriteLine($"วันเมื่อวาน: {yesterday:yyyy-MM-dd (dddd)}");
// 3 วันที่แล้ว
DateTime threeDaysAgo = today.AddDays(-3);
Console.WriteLine($"3 วันที่แล้ว: {threeDaysAgo:yyyy-MM-dd (dddd)}");
// 1 สัปดาห์ก่อน
DateTime lastWeek = today.AddDays(-7);
Console.WriteLine($"1 สัปดาห์ก่อน: {lastWeek:yyyy-MM-dd (dddd)}");
// 1 เดือนก่อน (ประมาณ)
DateTime lastMonth = today.AddDays(-30);
Console.WriteLine($"~1 เดือนก่อน: {lastMonth:yyyy-MM-dd (dddd)}");
// แสดงตาราง 7 วันที่ผ่านมา
Console.WriteLine("\n--- 7 วันที่ผ่านมา ---");
for (int i = 1; i <= 7; i++)
{
DateTime past = today.AddDays(-i);
Console.WriteLine($" {i} วันก่อน: {past:yyyy-MM-dd (dddd)}");
}
}
}
ผลลัพธ์ (สมมติวันนี้ 31 ธันวาคม 2024)
วันนี้: 2024-12-31 (Tuesday)
วันเมื่อวาน: 2024-12-30 (Monday)
3 วันที่แล้ว: 2024-12-28 (Saturday)
1 สัปดาห์ก่อน: 2024-12-24 (Tuesday)
~1 เดือนก่อน: 2024-12-01 (Sunday)
--- 7 วันที่ผ่านมา ---
1 วันก่อน: 2024-12-30 (Monday)
2 วันก่อน: 2024-12-29 (Sunday)
3 วันก่อน: 2024-12-28 (Saturday)
4 วันก่อน: 2024-12-27 (Friday)
5 วันก่อน: 2024-12-26 (Thursday)
6 วันก่อน: 2024-12-25 (Wednesday)
7 วันก่อน: 2024-12-24 (Tuesday)
การใช้งานจริง: รายงานย้อนหลัง
public class ReportGenerator
{
public DateRange GetLastWeekRange()
{
DateTime end = DateTime.Today.AddDays(-1); // เมื่อวาน
DateTime start = end.AddDays(-6); // 7 วันย้อนรวมเมื่อวาน
return new DateRange(start, end);
}
public DateRange GetLastMonthRange()
{
DateTime end = DateTime.Today.AddDays(-1);
DateTime start = new DateTime(end.Year, end.Month, 1); // 1 ต.ค. ของเดือนที่แล้ว
// หรือ: start = end.AddMonths(-1).AddDays(1 - end.AddMonths(-1).Day); // Complex
return new DateRange(start, end);
}
}
public record DateRange(DateTime Start, DateTime End);
AddDays vs AddMonths สำหรับ "เดือนก่อน"
DateTime today = new DateTime(2024, 3, 31); // 31 มีนาคม
// AddDays(-30) - ไม่แม่นยำ
DateTime approx = today.AddDays(-30); // 29 กุมภาพันธ์ 2024 (ปีอธิกสุรทิน)
// หรือ 1 มีนาคม 2023 (ปีไม่ใช่อธิกสุรทิน)
// AddMonths(-1) - ถูกต้อง (จัดการวันสุดเดือน)
DateTime exact = today.AddMonths(-1); // 29 กุมภาพันธ์ 2024 (วันสุดท้ายของเดือนก่อนหน้า)
ข้อควรระวัง
AddDays()คืนค่าDateTimeใหม่ - ตัวแปรเดิมไม่เปลี่ยน- รองรับค่าทศนิยม:
AddDays(-0.5)= 12 ชั่วโมงก่อน - จัดการข้ามเดือน/ปีอัตโนมัติ (1 ม.ค. - 1 วัน = 31 ธ.ค. ปีก่อน)
- จัดการปีอธิกสุรทินอัตโนมัติ
- สำหรับการคำนวณ "เดือนก่อน/หน้า" ควรใช้
AddMonths()แทน - เวลา (Time Component) จะคงอยู่ - ใช้
.Dateเพื่อได้เฉพาะวันที่