我正在设置某个birthdayTextField的日期,就像这样
@objc func birthdayDatePickerValueChanged(sender: UIDatePicker) {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
birthdayTextField.text = formatter.string(from: sender.date)
}
现在,此文本字段值存储在字符串属性中的coredata中。可以在coredata中存储许多这样的生日日期。现在,当我从数据库中获取这些日期时,我想在tableview中仅显示下个月的日期。
如何实现......?
答案 0 :(得分:1)
这是一个使用Calendar
强大的日期数学能力以及DateComponents
扩展中的Date
的解决方案。
nextDate(after:matching:matchingPolicy:)
寻找day == 1
month
的{{1}}粒度进行比较。compare(:to:toGranularity:)
只在您的方法
中使用它extension Date {
func isDateInNextMonth() -> Bool {
let calendar = Calendar.current
let nextMonth = calendar.nextDate(after: Date(), matching: DateComponents(day:1), matchingPolicy: .nextTime)!
return calendar.compare(self, to: nextMonth, toGranularity: .month) == .orderedSame
}
}
或者 - 更多才多艺 - 根据其他 isDateIn ... 方法作为sender.date.isDateInNextMonth()
Calendar
并使用它
extension Calendar {
func isDateInNextMonth(_ date : Date) -> Bool {
let nextMonth = self.nextDate(after: Date(), matching: DateComponents(day:1), matchingPolicy: .nextTime)!
return self.compare(date, to: nextMonth, toGranularity: .month) == .orderedSame
}
}
修改强>
如果你想检查日期是否在接下来的30天内,那就更容易了
Calendar.current.isDateInNextMonth(sender.date)