Để mở rộng trên SashaZ
Swift iOS 8 trở lên Khi bạn cần nhiều hơn so với việc so sánh ngày lớn hơn hoặc đơn giản hơn. Ví dụ, đó là cùng ngày hoặc ngày hôm trước, ...
Lưu ý: Không bao giờ quên múi giờ. Múi giờ lịch có mặc định, nhưng nếu bạn không thích mặc định, bạn phải tự đặt múi giờ. Để biết đó là ngày nào, bạn cần biết múi giờ bạn đang hỏi.
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)
}
}
Sử dụng nó như thế này:
if thisDate.compareTo(date: Date(), toGranularity: .day) == .orderedDescending {
// thisDate is a previous day
}
Của một ví dụ phức tạp hơn. Tìm và lọc tất cả các ngày trong một mảng, từ cùng một ngày với "find ThisDay":
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)) }