问题解决使用Swift 5
并延伸Calendar
.
extension Calendar {
private var currentDate: Date { return Date() }
func isDateInThisWeek(_ date: Date) -> Bool {
return isDate(date, equalTo: currentDate, toGranularity: .weekOfYear)
}
func isDateInThisMonth(_ date: Date) -> Bool {
return isDate(date, equalTo: currentDate, toGranularity: .month)
}
func isDateInNextWeek(_ date: Date) -> Bool {
guard let nextWeek = self.date(byAdding: DateComponents(weekOfYear: 1), to: currentDate) else {
return false
}
return isDate(date, equalTo: nextWeek, toGranularity: .weekOfYear)
}
func isDateInNextMonth(_ date: Date) -> Bool {
guard let nextMonth = self.date(byAdding: DateComponents(month: 1), to: currentDate) else {
return false
}
return isDate(date, equalTo: nextMonth, toGranularity: .month)
}
func isDateInFollowingMonth(_ date: Date) -> Bool {
guard let followingMonth = self.date(byAdding: DateComponents(month: 2), to: currentDate) else {
return false
}
return isDate(date, equalTo: followingMonth, toGranularity: .month)
}
}
Usage:
let day: Double = 60 * 60 * 24
let currentDate = Date() // Thu 25 Apr 2019
let futureDate = Date(timeInterval: 3 * day, since: currentDate) // Sun 28 Apr 2019
if Calendar.current.isDateInThisWeek(futureDate) {
// this will be executed if first day of week is Monday
} else {
// this will be executed if first day of week is Sunday
}
代码根据以下条件评估日期是否在范围 (sameWeek, nextWeek) 内Calendar
实例。
If Calendar
实例是current
它将根据设备设置确定一周的开始(星期一或星期日),但如果您想要不同的行为,您可以更改Calendar
实例:Calendar(identifier: .chinese).isDateInNextWeek(someDate)
如果我们尝试创建,此代码也适用DateComponents
具有不正确的值,如下所示:DateComponents(year: 2019, month: 13)
。
在本例中它创建日期01 Jan 2020
.