Я предполагаю, что вы хотите учитывать только часть календарной даты каждого Date
и игнорировать время суток.Таким образом, вы считаете, что 2019-02-01-12: 00: 00 находятся в пределах 7 дней с 2019-02-08-14: 00: 00, даже если между этими двумя моментами есть 7 дней и 2 часа, что большеровно через 7 дней.
Вы можете использовать два метода Calendar
для вычисления разницы в календарных днях между двумя Date
с, игнорируя время суток.Сначала получите компоненты года, месяца и дня для каждого Date
, отбрасывая части времени дня:
let aymd = calendar.dateComponents([.year, .month, .day], from: a)
let bymd = calendar.dateComponents([.year, .month, .day], from: b)
Затем спросите Calendar
о разнице в днях между двумя DateComponents
:
let diff = dateComponents([.day], from: aymd, to: bymd).day!
Это diff
- число дней между двумя входными датами со знаком.Это положительно, если b
после a
, и отрицательно, если b
предшествует a
.
. Я бы обернул это в расширение на Calendar
следующим образом:
extension Calendar {
func roundedDays(from a: Date, to b: Date) -> Int {
let aymd = dateComponents([.year, .month, .day], from: a)
let bymd = dateComponents([.year, .month, .day], from: b)
let diff = dateComponents([.day], from: aymd, to: bymd).day!
return diff
}
}
Тогда вы можете использовать это так:
let calendar = Calendar.autoupdatingCurrent
if abs(calendar.roundedDays(from: Date(), to: targetDate)) <= 7 {
print("\(targetDate) is within 7 days of now")
}