Search code examples
iphoneobjective-cnsdateuidatepicker

UIDatePicker, setting maximum and minimum dates based on todays date


If I have a UIDatePicker, and I wish to set the minimum and maximum date range to be between thirty years ago and thirty years in the future, how would I set that up?


Solution

  • Not tested, but you probably want something like this.

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate *currentDate = [NSDate date];
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setYear:30];
    NSDate *maxDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
    [comps setYear:-30];
    NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
    
    [datePicker setMaximumDate:maxDate];
    [datePicker setMinimumDate:minDate];
    

    Update for Swift 4.1

    let calendar = Calendar(identifier: .gregorian)
    var comps = DateComponents()
    comps.year = 30
    let maxDate = calendar.date(byAdding: comps, to: Date())
    comps.year = -30
    let minDate = calendar.date(byAdding: comps, to: Date())
    datePicker.maximumDate = maxDate
    datePicker.minimumDate = minDate