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

การหาวันพรุ่งนี้ใน C# ด้วย DateTime.AddDays(1)

เมธอด 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)TimeSpandt.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 เพื่อตัดเวลาออก