在 SashaZ 上扩展 - 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)) }