替え玉バリカタでお願いします

お仕事と、お仕事そうでお仕事じゃない、少しお仕事な備忘など。

NSDateで次の5分後を5分刻みで求める方法

UIDatePickerなどで、今以降だけ選択可能にしたい場合がある。
この場合、UIDatePickerをプロパティに持つUIViewControllerを初期化ことがあるが、よく忘れがちだし、いちいち考えたくないのでメモ。

コード

 - (NSDate *) nextMinuteWithDate:(NSDate*)date interval:(NSInteger)interval
{
    NSDate *nextMinute = date;
    if (!nextMinute) {
        nextMinute = [[NSDate alloc] initWithTimeIntervalSinceNow:0.f];
    }
     
    NSInteger adjustMin = [nextMinute minute] % interval;
    nextMinute = [nextMinute dateBySubtractingMinutes:adjustMin];
    nextMinute = [nextMinute dateAtStartOfMinute];
    nextMinute = [nextMinute dateByAddingMinutes:interval];
    
    return nextMinute;
}

よくやる方法

 - (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view from its nib.
    
    NSDate *d = [[NSDate alloc] initWithTimeIntervalSinceNow:0.f];
    self.datePicker.minimumDate = [d nextMinuteWithDate:d interval:TIMEPICKER_INTERVAL];
    
    // 他の処理
}

上記のコードはNSDateのカテゴリとして実装しているので、

self.datePicker.minimumDate = [d nextMinuteWithDate:d interval:TIMEPICKER_INTERVAL];

のあたりは冗長なコードになっているが、とりあえずコレでよしとしている。

参考:
https://github.com/erica/NSDate-Extensions

広告を非表示にする