Untuk memperluas pada SashaZ
Swift iOS 8 dan lebih tinggi Saat Anda membutuhkan lebih dari sekadar perbandingan tanggal yang lebih besar atau lebih kecil. Misalnya hari itu sama atau hari sebelumnya, ...
Catatan: Jangan pernah lupa zona waktu. Zona waktu kalender memiliki default, tetapi jika Anda tidak suka default, Anda harus mengatur sendiri zona waktu. Untuk mengetahui hari apa sekarang, Anda perlu tahu di zona waktu yang Anda tanyakan.
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)
}
}
Gunakan seperti ini:
if thisDate.compareTo(date: Date(), toGranularity: .day) == .orderedDescending {
// thisDate is a previous day
}
Dari contoh yang lebih kompleks. Temukan dan filter semua tanggal dalam sebuah array, yang berasal dari hari yang sama dengan "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)) }