เพื่อต่อยอดกับ SashaZ
Swift iOS 8 ขึ้นไปเมื่อคุณต้องการมากกว่าการเปรียบเทียบขนาดใหญ่หรือเล็กกว่าวันที่ ตัวอย่างเช่นมันเป็นวันเดียวกันหรือวันก่อนหน้า ...
หมายเหตุ:อย่าลืมเขตเวลา เขตเวลาของปฏิทินมีค่าเริ่มต้น แต่ถ้าคุณไม่ชอบค่าเริ่มต้นคุณจะต้องตั้งค่าเขตเวลาด้วยตัวเอง หากต้องการทราบว่าเป็นวันใดคุณต้องทราบว่าคุณขอเขตเวลาใด
extension Date {
func compareTo(date: Date, toGranularity: Calendar.Component ) -> ComparisonResult {
var cal = Calendar.current
cal.timeZone = TimeZone(identifier: "Europe/Paris")!
return cal.compare(self, to: date, toGranularity: toGranularity)
}
}
ใช้มันแบบนี้:
if thisDate.compareTo(date: Date(), toGranularity: .day) == .orderedDescending {
// thisDate is a previous day
}
จากตัวอย่างที่ซับซ้อนมากขึ้น ค้นหาและกรองวันที่ทั้งหมดในอาร์เรย์ซึ่งมาจากวันเดียวกันกับ "findThisDay":
let formatter = DateFormatter()
formatter.timeZone = TimeZone(identifier: "Europe/Paris")
formatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
let findThisDay = formatter.date(from: "2018/11/05 08:11:08")!
_ = [
formatter.date(from: "2018/12/05 08:08:08")!,
formatter.date(from: "2018/11/05 08:11:08")!,
formatter.date(from: "2018/11/05 11:08:22")!,
formatter.date(from: "2018/11/05 22:08:22")!,
formatter.date(from: "2018/11/05 08:08:22")!,
formatter.date(from: "2018/11/07 08:08:22")!,
]
.filter{ findThisDay.compareTo(date: $0 , toGranularity: .day) == .orderedSame }
.map { print(formatter.string(from: $0)) }