Get an Array of Dates of the current week starting on Monday

后端 未结 1 1564
时光说笑
时光说笑 2020-12-12 00:10

I have this code currently:

public var daysOfWeek: [Date]? {

    let calendar = Calendar.current

    let today = self
    let dayOfWeek = calendar.componen         


        
相关标签:
1条回答
  • 2020-12-12 01:07

    You just need to get the first day of the week using iso8601 calendar where the first weekday is Monday and add from 0 to 6 days to it. Try like this:

    extension Calendar {
        static let iso8601 = Calendar(identifier: .iso8601)
    }
    extension Date {
        var startOfWeek: Date {
            return Calendar.iso8601.date(from: Calendar.iso8601.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self))!
        }
        var daysOfWeek: [Date] {
            let startOfWeek = self.startOfWeek
            return (0...6).compactMap{ Calendar.current.date(byAdding: .day, value: $0, to: startOfWeek)}
        }
    }
    

    Date().daysOfWeek  // ["Aug 13, 2018 at 12:00 AM", "Aug 14, 2018 at 12:00 AM", "Aug 15, 2018 at 12:00 AM", "Aug 16, 2018 at 12:00 AM", "Aug 17, 2018 at 12:00 AM", "Aug 18, 2018 at 12:00 AM", "Aug 19, 2018 at 12:00 AM"]
    
    0 讨论(0)
提交回复
热议问题