SashaZ erweitern
Schnelles iOS 8 und höher Wenn Sie mehr als nur größere oder kleinere Datumsvergleiche benötigen. Zum Beispiel ist es am selben Tag oder am vorherigen Tag, ...
Hinweis: Vergessen Sie niemals die Zeitzone. Die Kalender-Zeitzone hat eine Standardeinstellung. Wenn Ihnen die Standardeinstellung nicht gefällt, müssen Sie die Zeitzone selbst festlegen. Um zu wissen, welcher Tag heute ist, müssen Sie wissen, in welcher Zeitzone Sie fragen.
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)
}
}
Verwenden Sie es so:
if thisDate.compareTo(date: Date(), toGranularity: .day) == .orderedDescending {
// thisDate is a previous day
}
Ein komplexeres Beispiel. Suchen und filtern Sie alle Daten in einem Array, die vom selben Tag wie "findThisDay" stammen:
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)) }