example iphone objective-c nsdate uidatepicker

iphone - example - uipickerview



UIDatePicker, estableciendo fechas máximas y mínimas basadas en la fecha de hoy (6)

Si tengo un UIDatePicker, y deseo establecer el rango mínimo y máximo de fechas entre treinta años atrás y treinta años en el futuro, ¿cómo podría configurarlo?


Adaptando la respuesta de @warrenm a Swift:

let currentDate = Date() var dateComponents = DateComponents() let calendar = Calendar.init(identifier: .gregorian) dateComponents.year = -100 let minDate = calendar.date(byAdding: dateComponents, to: currentDate) dateComponents.year = -13 let maxDate = calendar.date(byAdding: dateComponents, to: currentDate)


Estaba viendo este tema hoy y se le ocurrió una solución en Swift 3 que extiende UIDatePicker.

var datePicker = UIDatePicker() var date = Date() datePicker.setDate(date, unit:.year, deltaMinimum:-30, deltaMaximum:30, animated:true)

El método setDate establecerá tres valores (fecha, mínimo, máximo) de la instancia de UIDatePicker .

setMinMax solo establece el mínimo y máximo. El mínimo y el máximo se calculan utilizando la fecha actual del selector.

La unidad puede ser los siguientes valores:

  • .año
  • .mes
  • .día
  • .hora
  • .minuto
  • .segundo

Para establecer la fecha con más y menos treinta años, el código sería:

var datePicker = UIDatePicker() var date = Date() datePicker.setDate(date, unit:.year, deltaMinimum:-30, deltaMaximum:30, animated:true)


Mi versión rápida 4 de @toddg es:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 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];

¡Funciona genial para mí!


No probado, pero probablemente quieras algo como esto.

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];

Actualización para Swift 4.1

m_datePicker.maximumDate = [NSDate date];


Por favor, pruebe este código Ios8 +

extension UIDatePicker { /// set the date picker values and set min/max /// - parameter date: Date to set the picker to /// - parameter unit: (years, days, months, hours, minutes...) /// - parameter deltaMinimum: minimum date delta in units /// - parameter deltaMaximum: maximum date delta in units /// - parameter animated: Whether or not to use animation for setting picker func setDate(_ date:Date, unit:NSCalendar.Unit, deltaMinimum:Int, deltaMaximum:Int, animated:Bool) { setDate(date, animated: animated) setMinMax(unit: unit, deltaMinimum: deltaMinimum, deltaMaximum: deltaMaximum) } /// set the min/max for the date picker (uses the pickers current date) /// - parameter unit: (years, days, months, hours, minutes...) /// - parameter deltaMinimum: minimum date delta in units /// - parameter deltaMaximum: maximum date delta in units func setMinMax(unit:NSCalendar.Unit, deltaMinimum:Int, deltaMaximum:Int) { if let gregorian = NSCalendar(calendarIdentifier:.gregorian) { if let minDate = gregorian.date(byAdding: unit, value: deltaMinimum, to: self.date) { minimumDate = minDate } if let maxDate = gregorian.date(byAdding: unit, value: deltaMaximum, to: self.date) { maximumDate = maxDate } } } }


let currentDate = NSDate() let dateComponents = NSDateComponents() dateComponents.year = -13 let minDate = calendar.dateByAddingComponents(dateComponents, toDate: currentDate, options: NSCalendarOptions(rawValue: 0)) dateComponents.year = 30 let maxDate = calendar.dateByAddingComponents(dateComponents, toDate: currentDate, options: NSCalendarOptions(rawValue: 0)) dobPicker.maximumDate = maxDate dobPicker.minimumDate = minDate

Puede usar esta línea de código para establecer la fecha máxima (Hoy).