2017-03-08 14 views
0

2つのUIDatePickersを使用するiOSアプリケーションを作成しています。彼らはほんの数時間と分を表示します(私のアプリはまだ月、日、年を使用します)。 main.storyboardでは、UIDatePickersのDate値をCurrent Dateに設定しました。そして、その間隔を15分に設定しました。UIDatePickerは15分間隔に設定されていますが、ユーザーがスクロールしない場合の日付は15分間隔ではありません

私がUIDatePickersをスクロールしないと、それらから取得する日付の値は15分間隔ではないという問題があります。私がそれらをスクロールすると、15分の間隔が得られます。

例: 実際の時間は8:47 PMです。 UIDatePickerは午後8時45分にロードされます。スクロールせずに取得した日付の値は、午後8時45分ではなく、午後8時47分になります。私が8:30 PMまたは9:00 PMにスクロールすると、私はそれらの時間を得るでしょう。

私は15分間隔で自分の時間を取得したいと思います。これを行う方法はありますか?または、最も近い15分間隔に丸める機能を記述する必要がありますか?

答えて

0

datePickerの日付は、viewDidLoadで呼び出す関数に理想的に設定する必要があります。

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

計算には、秒数を使用するDateのtimeIntervalメソッド/ computedプロパティを使用します。

たとえば、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()) 
}() 
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の背景から来ていますdはSwiftと経験の浅い。

3

実際、誰かがこれをSwift 3で拡張したことが判明しました。私の間違い。このソリューションは私にとって完璧に機能しました。

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

+0

ありがとう私は同じものを探していました:) –

関連する問題