【问题标题】:Show a specific day of the week based on today's date根据今天的日期显示一周中的特定日期
【发布时间】:2021-10-03 13:48:56
【问题描述】:

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

【问题讨论】:

  • 如果是星期天,您是否只关心显示星期二?您要使用的实际格式是什么?如果是星期一还是星期三,它应该显示什么?
  • @xTwisteDx 让我解释一下我正在使用 LazyVGrid 在 swiftUI 中显示日历。现在是用户打开应用程序后选择的日期和当前日期。仅当当天是星期日或星期一时,我才需要在星期二显示日历选择,否则日历必须显示当天的选择

标签: ios swift calendar


【解决方案1】:

您不需要为此自定义枚举,请检查工作日是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多