根据今天的日期显示一周中的特定日期

Show a specific day of the week based on today's date

大家好,我正在与“Calendar”合作,我正在尝试找到正确的方式和优雅的方式来获取下周的星期二,前提是今天的日期是星期日或星期一.

例如,如果今天是星期天,我想在接下来的星期二显示下一个可用日期

目前我已经这样做了,但我想知道是否有更正确和更优雅的方式(我不知道使用 DateInterval 是否会更好)

enum WeekdaysRef: Int { case Dom = 1, Lun, Mar, Mer, Gio, Ven, Sab }

extension Date {
    
     func startDate(using calendar: Calendar = .current) -> Date {
        
        let sunday = calendar.component(.weekday, from: self) == WeekdaysRef.Dom.rawValue
        let monday = calendar.component(.weekday, from: self) == WeekdaysRef.Lun.rawValue

        return sunday ? today(adding: 2) : Monday ? today(adding: 1) : self
    }

     func today(adding: Int, _ calendar: Calendar = .current) -> Date {
        calendar.date(byAdding: .day, value: adding, to: self)!
    }
}

您不需要自定义枚举,请检查工作日是 1 还是 2,然后 return 下周二

func nextTuesday(after date: Date, using calendar: Calendar = .current) -> Date? {
    let weekday = calendar.component(.weekday, from: date)
    return weekday > 2 ? nil : calendar.date(byAdding: .day, value: weekday % 2 + 1, to: date)
}

请注意,我在这里使用了一个独立函数,如果输入日期不是星期日或星期一,则 return nil 但这可以很容易地更改为在扩展中使用 self and/or returning self 或给定的日期而不是 nil