How to get all days in current week in swift How to get all days in current week in swift swift swift

How to get all days in current week in swift


To get the weekdays of the week, it is:

let calendar = Calendar.currentlet today = calendar.startOfDay(for: Date())let dayOfWeek = calendar.component(.weekday, from: today)let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: today)!let days = (weekdays.lowerBound ..< weekdays.upperBound)    .compactMap { calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: today) }  // use `flatMap` in Xcode versions before 9.3    .filter { !calendar.isDateInWeekend($0) }

To display that as "Thursday = 82", it is

let formatter = DateFormatter()formatter.dateFormat = "eeee' = 'D"for date in days {    print(formatter.string(from: date))}

Or

let strings = days.map { formatter.string(from: $0) }


I had problems with adapting Rob's solution for when the week starts on Monday. This solution adapts to your calendar.firstWeekday setting.

var calendar = Calendar.autoupdatingCurrentcalendar.firstWeekday = 2 // Start on Monday (or 1 for Sunday)let today = calendar.startOfDay(for: Date())var week = [Date]()if let weekInterval = calendar.dateInterval(of: .weekOfYear, for: today) {    for i in 0...6 {        if let day = calendar.date(byAdding: .day, value: i, to: weekInterval.start) {            week += [day]        }    }}return week


I made a small extension on Calendar, which might be helpful for anyone else looking for a more functional solution to this.

import Foundationextension Calendar {  func intervalOfWeek(for date: Date) -> DateInterval? {    dateInterval(of: .weekOfYear, for: date)  }  func startOfWeek(for date: Date) -> Date? {    intervalOfWeek(for: date)?.start  }  func daysWithSameWeekOfYear(as date: Date) -> [Date] {    guard let startOfWeek = startOfWeek(for: date) else {      return []    }    return (0 ... 6).reduce(into: []) { result, daysToAdd in      result.append(Calendar.current.date(byAdding: .day, value: daysToAdd, to: startOfWeek))    }    .compactMap { $0 }  }}