如何以日期格式向用户询问准确的日期

How to ask a user for an accurate date in a date format

所以我有一个程序需要向用户询问日期和时间。但那个日期必须是在未来或非常遥远的过去。我已经尝试了 UIDatePicker 但发现日期选择器不是解决此类问题的最佳方法,因为它需要大量滚动,并且它不会加载超过特定日期由于某些原因。我在想 UIPickerView 要求年、月、日和时间。但我不知道该怎么做,因为假设这个月是 9 月,只有 30 天,那么我怎么能阻止用户选择 31 天呢。所以如果有人能帮助我,那就太棒了。如果您有任何问题或需要代码,请直接提问。哦,顺便说一下,我希望它采用日期格式,以便我可以将它与其他日期进行比较。

给定 yearmonth,您可以像这样计算要提供给选择器的可能 day 值的数组:

let calendar = Calendar.current
let components = DateComponents(year: year, month: month, day: 1)
guard let date = calendar.date(from: components),
    let range = calendar.range(of: .day, in: .month, for: date) else { return }
let days = Array(range)

I would like it in a date format where I can compare it to other date.

一旦你有了 yearmonthdayhour(转换为 24 小时值,从 0 到 23),你可以构建Date 像这样的对象:

let calendar = Calendar.current
let components = DateComponents(year: year, month: month, day: day, hour: hour, minute: minute)
guard let date = calendar.date(from: components) else { return }

date 现在可以与任何其他 Date 对象进行比较。