Продлить на СашаЗ
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)) }