如何在 swift 中获取所有星期的开始日期和结束日期

how to get year all weeks start date and end date in swift

我正在制作一个应用程序,我需要在当年的所有日子中获取一年中的几周。为此,我正在寻找类似于以下的结果

30 Dec - 05 Jan
06 Jan - 12 Jan
13 Jan - 19 Jan
.
.
.
28 Dec - 03 Jan

您可以在这个帖子中使用建议的扩展: 迭代周数,然后使用所需的格式化程序打印值:

let calendar = Calendar.current
let currentYear = calendar.component(.year, from: Date())
let lastDayOfTheYear = calendar.date(from: DateComponents(year: currentYear, month: 12, day: 31))

var currentDate = calendar.date(from: DateComponents(year: currentYear, month: 1, day: 1))

while currentDate! < lastDayOfTheYear! {
    let startDay = currentDate!.startOfWeek!.formatted()
    let endDay = currentDate!.endOfWeek!.formatted()
    print("\(startDay) - \(endDay)")
    currentDate = calendar.date(byAdding: .weekOfYear, value: 1, to: currentDate!)
}

extension Date {
    func formatted() -> String {
        let formatter = DateFormatter()
        formatter.dateStyle = .long
        return formatter.string(from: self)
    }
    
    var startOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 1, to: sunday)
    }

    var endOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 7, to: sunday)
    }
}

打印:

December 30, 2019 - January 5, 2020
January 6, 2020 - January 12, 2020
...
December 21, 2020 - December 27, 2020
December 28, 2020 - January 3, 2021