ios - 根据今天的日期显示一周中的特定日期
问题描述
大家好,我正在与 ' 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,然后在下周二返回
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
推荐阅读
- javascript - 为每个数组项添加单击
- j - 这个空列表的第一个元素如何为 0?
- javascript - 如何在页面加载时随机播放视频?
- python - 有什么方法可以从 python 文件生成多平台 exe/可执行文件?
- flutter - Flutter,在 image_picker 上出现构建错误:^0.6.0+9
- function - 主机.json;批量大小的含义
- java - SPEL 在 KafkaListener 中不起作用。无法解决财产
- phalcon - Phalcon 在两列的 Query\Builder 中使用 LIKE
- c# - 如何从 DateTime 属性中删除 00:00:00
- c++ - 移动构造函数是否使 shared_from_this 无效