DatePicker отключить воскресенье + время открытия - PullRequest
0 голосов
/ 18 марта 2020

Я использую этот код:

    // 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 Ответ

1 голос
/ 18 марта 2020

Я думаю, что лучше определить, является ли закрытый час до или после полуночи, а затем рассчитать новую дату по-разному, исходя из этого

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