How to get Monday's date of the current week in swift

前端 未结 8 1735
死守一世寂寞
死守一世寂寞 2020-11-29 05:36

I\'m trying to get Monday\'s date of the current week. This is treated as the first day of the week in my table view. I also need to get Sunday\'s of the current week. This

8条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-29 06:00

    You can use calendar ISO8601 where the first weekday is Monday:

    Swift 5.2 or later

    extension Calendar {
        static let iso8601 = Calendar(identifier: .iso8601)
        static let iso8601UTC: Calendar = {
            var calendar = Calendar(identifier: .iso8601)
            calendar.timeZone = TimeZone(identifier: "UTC")!
            return calendar
        }()
    }
    

    let monday =
        Calendar.iso8601.dateComponents([.calendar, .yearForWeekOfYear, .weekOfYear], from: Date()).date!  // "Nov 9, 2020 at 12:00 AM"
    print(monday.description(with: .current))   // "Monday, November 9, 2020 at 12:00:00 AM Brasilia Standard Time\n"
    let mondayUTC =
        Calendar.iso8601UTC.dateComponents([.calendar, .yearForWeekOfYear, .weekOfYear], from: Date()).date!  // "Nov 8, 2020 at 9:00 PM" TimeZone -03:00
    print(mondayUTC)   // "2020-11-09 00:00:00 +0000\n"
    

    Implemented as a Date computer property extension:

    extension Date {
        var mondayOfTheSameWeek: Date {
            Calendar.iso8601.dateComponents([.calendar, .yearForWeekOfYear, .weekOfYear], from: self).date!
        }
        var mondayOfTheSameWeekAtUTC: Date {
            Calendar.iso8601UTC.dateComponents([.calendar, .yearForWeekOfYear, .weekOfYear], from: self).date!
        }
    }
    

    let mondayOfTheSameWeek = Date().mondayOfTheSameWeek   // "Nov 9, 2020 at 12:00 AM"
    print(mondayOfTheSameWeek.description(with: .current)) // "Monday, November 9, 2020 at 12:00:00 AM Brasilia Standard Time\n"
    let mondayOfTheSameWeekAtUTC = Date().mondayOfTheSameWeekAtUTC  // "Nov 8, 2020 at 9:00 PM"
    print(mondayOfTheSameWeekAtUTC) // "2020-11-09 00:00:00 +0000\n"
    

提交回复
热议问题