根据今天的日期显示一周中的特定日期
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
大家好,我正在与“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