SwiftUI 中 DatePicker 的两个 ClosedRange

Rit*_*tik 7 datepicker ios swift swiftui

日期封闭范围示例:

var dateClosedRange: ClosedRange<Date> {
    let today = Calendar.current.date(byAdding: .minute, value: -1, to: Date())!
    let seven = Calendar.current.date(byAdding: .day, value: 7, to: Date())!
    return today...seven
}
Run Code Online (Sandbox Code Playgroud)

时间封闭范围示例:

var timeClosedRange: ClosedRange<Date> {
    let min = Calendar.current.date(bySetting: .hour, value: 8, of: Date())!
    let max = Calendar.current.date(bySetting: .hour, value: 20, of: Date())!
    return min...max
}
Run Code Online (Sandbox Code Playgroud)

应用范围的示例:

DatePicker(selection: $scheduledStart, in: timeClosedRange) {
    Text("Start Date")
}
Run Code Online (Sandbox Code Playgroud)

如果我输入dateClosedRange,那么我可以选择指定天内的日期,但时间可以是 24 小时之间的任何时间。

如果我输入timeClosedRange,那么我可以选择上午 8 点至晚上 8 点之间的时间,但我只能选择当前日期,而不能选择其他日期。

有什么方法可以将两个范围放入一个 DatePicker 中吗?

小智 0

您可以使用DateComponents该实例来实现:

let dateAndTimeRange: ClosedRange<Date> = {
  let calendar = Calendar.current
  let startComponents = DateComponents(
                          year: 2020,
                          month: 1,
                          day: 1,
                          hour: 00,
                          minute: 00,
                          second: 00
  )
  let endComponents = DateComponents(
                        year: 2020,
                        month: 12,
                        day: 31,
                        hour: 23,
                        minute: 59,
                        second: 59
  )
  return calendar.date(from:startComponents)!
    ...
    calendar.date(from:endComponents)!
}()
Run Code Online (Sandbox Code Playgroud)