我有一个日期选择器,“minuteinterval”设置为 15 分钟。 当我的屏幕出现时,我看到(例如)“今天 18:45”,但如果我打印这个值,我会得到:“18:43”。 而如果我从选择器中选择日期,它会正常工作。
override viewDidLoad(){
super.viewDidLoad
pickerTime.minuteInterval = 15
print(pickerTime.date.description)
}
最佳答案
问题在于,如果您不手动设置 DatePicker 的初始值,它的初始值将设置为当前时间。您可以获得当前分钟,将其转换为 Double,除以目标分钟间隔,向上取整,乘以目标间隔并截断除以 60 的结果提醒。现在您可以将结果转换回整数并使用日历的下面的方法来查找与您的分钟组件匹配的下一个日期:
func nextDate(after date: Date, matching components: DateComponents, matchingPolicy: Calendar.MatchingPolicy, repeatedTimePolicy: Calendar.RepeatedTimePolicy = .first, direction: Calendar.SearchDirection = .forward) -> Date?
extension Date {
var minute: Int { Calendar.current.component(.minute, from: self) }
func nextDate(roundedTo minutes: Int) -> Date {
Calendar.current.nextDate(after: self,
matching: .init(minute: Int((Double(minute)/Double(minutes)).rounded(.up) * Double(minutes)) % 60),
matchingPolicy: .nextTime)!
}
}
将当前日期设置为最近的时间间隔:
let datePicker = UIDatePicker()
let now = Date() // "Feb 5, 2020 at 6:48 PM"
datePicker.date = now.nextDate(roundedTo: 15)
datePicker.minuteInterval = 15
datePicker.date // "Feb 5, 2020 at 7:00 PM"
关于使用分钟间隔的 Swift 4 日期选择器错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60080808/