Я создал функцию, которая принимает в качестве аргументов дату начала и количество недель и возвращает массив DateInterval
для дат начала и окончания недели
func weeks(from date: Date, duration: Int) -> [DateInterval]? {
let calendar = Calendar.current
//Get date for first day of the week
let diff = calendar.component(.weekday, from: date) - calendar.firstWeekday
guard let firstDate = calendar.date(byAdding: .day, value: -(diff < 0 ? 7 + diff : diff), to: date) else {
return nil
}
//Generate start and end date for the duration
var weeks = [DateInterval(start: firstDate, end: calendar.date(byAdding: .day, value: 6, to: firstDate)!)]
for week in 1..<duration {
guard let firstDayOfWeek = calendar.date(byAdding: .day, value: 7, to: weeks[week - 1].start),
let lastDayOfWeek = calendar.date(byAdding: .day, value: 6, to: firstDayOfWeek) else { return nil }
weeks.append(DateInterval(start: firstDayOfWeek, end: lastDayOfWeek))
}
return weeks
}
и для использования ее и печати даты, которые вы можете сделать
if let weeks = weeks(from: Date(), duration: 5) {
let formatter = DateFormatter()
formatter.dateFormat = "MMMM dd"
for interval in weeks {
print("\(formatter.string(from: interval.start)) - \(formatter.string(from: interval.end))")
}
}
, что выводит
13 июля - 19 июля 20 - 26 июля 27 июля - 02 августа 03 августа - 09 августа 10 - 16 августа