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

การหาวันเมื่อวานใน C# ด้วย DateTime.AddDays(-1)

ใช้เมธอด 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 เพื่อได้เฉพาะวันที่