首页 > 解决方案 > 根据今天的日期显示一周中的特定日期

问题描述

大家好,我正在与 ' 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)!
    }
}

标签: iosswiftcalendar

解决方案


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

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)
}

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


推荐阅读