DatePicker 禁用星期日 + 开放时间

DatePicker disable sunday + opening times

我正在使用此代码:

    // Disallow sundays, after 8pm and before 8am
    if weekday == 1 {
        datePicker.setDate(Date(timeInterval: 60*60*24*1, since: datePicker.date), animated: true)
    }

    if hour >= 20 && minute > 0 {
        let calendar = Calendar.current
        var components = DateComponents()
        components.hour = 9
        components.minute = 00
        datePicker.setDate(calendar.date(from: components)!, animated: false)
    }

    if hour < 8 {
       let calendar = Calendar.current
       var components = DateComponents()
       components.hour = 9
       components.minute = 00
       datePicker.setDate(calendar.date(from: components)!, animated: false)
    }

我想屏蔽周日+上午8点之前和晚上8点之后的时间。 如果有人选择了我们开放时间之外的时间,它应该滚动到有效时间。此代码无法正常工作,因为它会回滚到 1 月 1 日?

我已经尝试了很多变体,但没有结果。

我认为最好确定关闭时间是在午夜之前还是之后,然后基于此计算不同的新日期

let calendar = Calendar.current
if weekday == 1 || 20...23 ~= hour {
    if let next = calendar.date(byAdding: .day, value: 1, to: date),
        let opening = calendar.date(bySettingHour: 9, minute: 0, second: 0, of: next) {
        datePicker.setDate(opening)
    }
} else if 0..<8 ~= hour {
    if let opening = calendar.date(bySettingHour: 9, minute: 0, second: 0, of: date) {
        datePicker.setDate(opening)
    }
}