Estendere su SashaZ
Swift iOS 8 e versioni successive Quando hai bisogno di qualcosa di più di un semplice confronto di date più grandi o più piccole. Ad esempio, è lo stesso giorno o il giorno precedente, ...
Nota: non dimenticare mai il fuso orario. Il fuso orario di Calendar ha un valore predefinito, ma se non ti piace il valore predefinito, devi impostare tu stesso il fuso orario. Per sapere che giorno è, devi sapere in quale fuso orario stai chiedendo.
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)
}
}
Usalo in questo modo:
if thisDate.compareTo(date: Date(), toGranularity: .day) == .orderedDescending {
// thisDate is a previous day
}
Di un esempio più complesso. Trova e filtra tutte le date in un array, che sono dello stesso giorno di "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)) }