UIDatePicker设置为15分钟间隔,但用户不滚动的日期不是15分钟间隔

时间:2017-03-08 02:51:30

标签: ios swift date uidatepicker

我正在创建一个使用两个UIDatePickers的iOS应用程序。它们只显示小时和分钟(我的应用程序仍使用月,日和年)。在main.storyboard中,我将UIDatePickers的日期值设置为当前日期。并且,我将他们的间隔设置为15分钟。

问题是,如果我不滚动UIDatePickers,我从它们获得的日期值不是15分钟。如果我滚动它们,我会间隔15分钟。

实施例: 实际时间是下午8:47。 UIDatePicker加载到晚上8:45。我从中得到的日期值没有滚动将是晚上8:47,而不是晚上8:45。如果我向上滚动到晚上8:30或晚上9:00,我会得到那些时间。

我想以15分钟的间隔来节省时间。有没有办法做到这一点,还是我必须写一个函数来舍入到最近的15分钟间隔?

3 个答案:

答案 0 :(得分:5)

实际上,事实证明有人在Swift 3中为此写了一个扩展名。我的错误。这个解决方案非常适合我。

https://stackoverflow.com/a/42263214/7025448

答案 1 :(得分:0)

您必须在viewDidLoad中调用的函数中理想地设置datePicker的日期。

// Do your date computation here to get nearestFifteenMinuteInterval
self.yourDatePicker.date = nearestFifteenMinuteInterval

对于计算,使用Date的timeInterval方法/计算属性,使用秒数。

例如,timeIntervalSince1970是自1970年1月1日0:00:00以来经过的秒数。

此外,您可以使用以下日期作为参考日期:

let START_OF_DAY: Date = {
    let calendar: Calendar = Calendar(identifier: Calendar.Identifier.gregorian)
    return calendar.startOfDay(for: Date())
}()

答案 2 :(得分:0)

我遇到了这个问题并成功实现了解决此问题的方法:

- (NSDate *)roundToNearestQuarterHour:(NSDate *)date{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    unsigned unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay |  NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal | NSCalendarUnitWeekOfYear;
    NSDateComponents *components = [calendar components:unitFlags fromDate:date];
    NSInteger roundedToQuarterHour = round((components.minute/15.0)) * 15;
    components.minute = roundedToQuarterHour;
    return [calendar dateFromComponents:components];
}

所以你这样打电话:

NSDate *now = [self roundToNearestQuarterHour:[NSDate date]];

不幸的是,我来自Objective C背景,对Swift缺乏经验。

相关问题