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

วิธีบวกวันให้กับ Date ใน Swift

ใช้ Calendar และ DateComponents เพื่อบวกลบวันที่ใน Swift

โค้ดพื้นฐาน

let today = Date()
print("Today: \(today)")

// บวก 1 วัน
if let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: today) {
    print("Tomorrow: \(tomorrow)")
}

// ลบ 1 วัน
if let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: today) {
    print("Yesterday: \(yesterday)")
}

// บวกหลายหน่วยพร้อมกัน
var components = DateComponents()
components.day = 3
components.month = 1
if let futureDate = Calendar.current.date(byAdding: components, to: today) {
    print("3 days 1 month later: \(futureDate)")
}

Extension ใช้งานง่าย

extension Date {
    func adding(days: Int) -> Date? {
        return Calendar.current.date(byAdding: .day, value: days, to: self)
    }
    
    func adding(months: Int) -> Date? {
        return Calendar.current.date(byAdding: .month, value: months, to: self)
    }
    
    func adding(years: Int) -> Date? {
        return Calendar.current.date(byAdding: .year, value: years, to: self)
    }
    
    var startOfDay: Date {
        return Calendar.current.startOfDay(for: self)
    }
    
    var endOfDay: Date {
        var components = DateComponents()
        components.day = 1
        components.second = -1
        return Calendar.current.date(byAdding: components, to: startOfDay)!
    }
}

// ใช้งาน
let today = Date()
let nextWeek = today.adding(days: 7)
let nextMonth = today.adding(months: 1)

DateFormatter สำหรับแสดงผล

let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .short
formatter.locale = Locale(identifier: "th_TH")

print(formatter.string(from: today))      // 15 ธ.ค. 2567, 14:30
print(formatter.string(from: tomorrow!))  // 16 ธ.ค. 2567, 14:30

คำเตือน

  • ใช้ Calendar.current ซึ่งขึ้นกับ Time Zone และ Locale ของ User
  • Daylight Saving Time อาจทำให้ "1 วัน" ไม่เท่ากับ 24 ชั่วโมงพอดี
  • สำหรับการคำนวณธุรกรรม ใช้ UTC หรือ Fixed Calendar