使用分钟间隔的 Swift 4 日期选择器错误值

标签 swift datepicker

我有一个日期选择器,“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/

相关文章:

vue.js - Vue Datepicker 不会在渲染时显示默认日期

swift - nstimer 无法正常工作,显示相同的数据,并且页面 Controller 也不指示页面

javascript - 使用日期选择器时如何在输入字段日期中,当按按键上的逗号替换为点时

java - TimePicker 完成时调用非静态函数

swift - 奇怪的日期选择器行为 Xcode,swift 3

jquery ui datepicker多年来动态多个范围

ios - TableView不显示数据

ios - 更新 firebase 实时数据库 swift 4 中的特定子项

ios - 如何在 INSendPaymentIntent 中选择电话号码

ios - iCloud 有权使用应用程序吗?