ใช้ 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