example create ios objective-c nsdate nsdatepicker

ios - create - show date picker swift



Fecha mínima y máxima en UIDatePicker (11)

Quiero obtener la fecha mínima y máxima de un selector de fecha, pero la fecha mínima debe ser "- 18" de la fecha actual y la fecha máxima debe ser "- 100" de la fecha actual.

Supongamos que el año actual es 2018, entonces quiero la fecha mínima 2000 y la fecha máxima 1918.

Lo que he hecho hasta ahora es:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *components = [gregorian components:NSYearCalendarUnit fromDate:[NSDate date]]; NSInteger year = [components year]; int mindt = year - 18; int maxdt = year -100; // NSDate * MinDate = [components year] - 18; // NSDate * MaxDate = [components year] - 100; // self.datePicker.minimumDate = MinDate; // self.datePicker.maximumDate = MaxDate;

pero no puedo obtener este entero en mi formato de fecha ...


** Fecha mínima y máxima en UIDatePicker: #Swift

** si desea seleccionar la fecha mínima y máxima entre dos valores de fecha, use el siguiente código simple: **

por ejemplo: Fecha mínima: 01-04-2017 y fecha máxima: 31-03-2018

let calendar = Calendar.current var minDateComponent = calendar.dateComponents([.day,.month,.year], from: Date()) minDateComponent.day = 01 minDateComponent.month = 04 minDateComponent.year = 2017 let minDate = calendar.date(from: minDateComponent) print(" min date : /(String(describing: minDate))") var maxDateComponent = calendar.dateComponents([.day,.month,.year], from: Date()) maxDateComponent.day = 0 maxDateComponent.month = 03 + 1 maxDateComponent.year = 2018 let maxDate = calendar.date(from: maxDateComponent) print("max date : /(String(describing: maxDate))") picker.minimumDate = minDate! as Date picker.maximumDate = maxDate! as Date


Swift 4.1

extension UIDatePicker { func set18YearValidation() { let currentDate: Date = Date() var calendar: Calendar = Calendar(identifier: Calendar.Identifier.gregorian) calendar.timeZone = TimeZone(identifier: "UTC")! var components: DateComponents = DateComponents() components.calendar = calendar components.year = -18 let maxDate: Date = calendar.date(byAdding: components, to: currentDate)! components.year = -150 let minDate: Date = calendar.date(byAdding: components, to: currentDate)! self.minimumDate = minDate self.maximumDate = maxDate } }


Así es como se vería en 2017 (Swift 3)

var components = DateComponents() components.year = -100 let minDate = Calendar.current.date(byAdding: components, to: Date()) components.year = -18 let maxDate = Calendar.current.date(byAdding: components, to: Date()) datePicker.minimumDate = minDate datePicker.maximumDate = maxDate


En Swift 2.1 :

let currentDate: NSDate = NSDate() let calendar: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! // let calendar: NSCalendar = NSCalendar.currentCalendar() calendar.timeZone = NSTimeZone(name: "UTC")! let components: NSDateComponents = NSDateComponents() components.calendar = calendar components.year = -18 let minDate: NSDate = calendar.dateByAddingComponents(components, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))! components.year = -150 let maxDate: NSDate = calendar.dateByAddingComponents(components, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))! self.dateOfBirthUIDatePicker.minimumDate = minDate self.dateOfBirthUIDatePicker.maximumDate = maxDate print("minDate: /(minDate)") print("maxDate: /(maxDate)")


En Objective C, NSDateComponents * comps = [[NSDateComponents alloc] init];

NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:[NSDate date]]; NSInteger year = components.year; NSInteger month = components.month; NSInteger day = components.day; NSInteger minimumYear = year - 1900;//Given some year here for example NSInteger minimumMonth = month - 1; NSInteger minimumDay = day - 1; [comps setYear:-minimumYear]; [comps setMonth:-minimumMonth]; [comps setDay:-minimumDay]; NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0]; [datePicker setMinimumDate:minDate]; [datePicker setMaximumDate:[NSDate date]];

La fecha mínima sería enero 01 1900. Espero que funcione para todos ustedes .. :)

En Swift 2.0 o posterior

let calendar = NSCalendar(calendarIdentifier:NSCalendarIdentifierGregorian); let todayDate = NSDate() let components = calendar?.components([NSCalendarUnit.Year,NSCalendarUnit.Month,NSCalendarUnit.Day], fromDate: todayDate) let minimumYear = (components?.year)! - 1900 let minimumMonth = (components?.month)! - 1 let minimumDay = (components?.day)! - 1 let comps = NSDateComponents(); comps.year = -minimumYear comps.month = -minimumMonth comps.day = -minimumDay let minDate = calendar?.dateByAddingComponents(comps, toDate: todayDate, options: NSCalendarOptions.init(rawValue: 0)) datePicker.minimumDate = minDate datePicker.maximumDate = datePicker.date


Mire esto para la versión Swift. Valor negativo del usuario (-) para restar y valor positivo para agregar el componente de fecha.

1. Establecer una fecha mínima

yourDatePicker.minimumDate = Calendar.current.date(byAdding: .year, value: -1, to: Date())

2. Establecer la fecha máxima

yourDatePicker.maximumDate = Calendar.current.date(byAdding: .year, value: 1, to: Date())


Otro caso :

Supongamos que quiero mostrar la fecha de nacimiento como selector de fecha, Dob está dentro del rango de 1/1/1980 a 1/1/2000.

@IBOutlet var datePicker: UIDatePicker! override func viewDidLoad() { super.viewDidLoad() datePicker.datePickerMode = UIDatePickerMode.date // 01/01/1980 to 01/01/2000 let calendar = Calendar.current var minDateComponent = calendar.dateComponents([.day,.month,.year], from: Date()) minDateComponent.day = 01 minDateComponent.month = 01 minDateComponent.year = 1980 let minDate = calendar.date(from: minDateComponent) print(" min date : /(minDate)") var maxDateComponent = calendar.dateComponents([.day,.month,.year], from: Date()) maxDateComponent.day = 01 maxDateComponent.month = 01 maxDateComponent.year = 2000 let maxDate = calendar.date(from: maxDateComponent) print("max date : /(maxDate)") self.datePicker.minimumDate = minDate! as Date self.datePicker.maximumDate = maxDate! as Date }


Prueba esto:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDate *currentDate = [NSDate date]; NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setYear:-18]; NSDate *minDate = [gregorian dateByAddingComponents:comps toDate:currentDate options:0]; [comps setYear:-150]; NSDate *maxDate = [gregorian dateByAddingComponents:comps toDate:currentDate options:0]; [comps release]; self.datePicker.minimumDate = minDate; self.datePicker.maximumDate = maxDate;

Se puede traducir fácilmente a Swift:

let gregorian: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! let currentDate: NSDate = NSDate() let components: NSDateComponents = NSDateComponents() components.year = -18 let minDate: NSDate = gregorian.dateByAddingComponents(components, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))! components.year = -150 let maxDate: NSDate = gregorian.dateByAddingComponents(components, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))! self.datePicker.minimumDate = minDate self.datePicker.maximumDate = maxDate


Swift 3.0

let gregorian: NSCalendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)! let currentDate: Date = Date() let components: NSDateComponents = NSDateComponents() components.year = -150 let minDate: Date = gregorian.date(byAdding: components as DateComponents, to: currentDate, options: NSCalendar.Options(rawValue: 0))! components.year = -16 let maxDate: Date = gregorian.date(byAdding: components as DateComponents, to: currentDate, options: NSCalendar.Options(rawValue: 0))! self.datepicker.minimumDate = minDate self.datepicker.maximumDate = maxDate


Swift 4.0

extension UIDatePicker { func set18YearValidation() { let currentDate: Date = Date() var calendar: Calendar = Calendar(identifier: Calendar.Identifier.gregorian) calendar.timeZone = TimeZone(identifier: "UTC")! var components: DateComponents = DateComponents() components.calendar = calendar components.year = -18 let maxDate: Date = calendar.date(byAdding: components, to: currentDate)! components.year = -150 let minDate: Date = calendar.date(byAdding: components, to: currentDate)! self.minimumDate = minDate self.maximumDate = maxDate } }


Swift 4.1

Creé mi extensión para todo tipo de límite según Calendar.Component

extension UIDatePicker { func setLimit(forCalendarComponent component:Calendar.Component, minimumUnit min: Int, maximumUnit max: Int) { let currentDate: Date = Date() var calendar: Calendar = Calendar(identifier: Calendar.Identifier.gregorian) guard let timeZone = TimeZone(identifier: "UTC") else { return } calendar.timeZone = timeZone var components: DateComponents = DateComponents() components.calendar = calendar components.setValue(-min, for: component) if let maxDate: Date = calendar.date(byAdding: components, to: currentDate) { self.maximumDate = maxDate } components.setValue(-max, for: component) if let minDate: Date = calendar.date(byAdding: components, to: currentDate) { self.minimumDate = minDate } } }

Podemos usar esto de la siguiente manera:

self.datePicker.setLimit(forCalendarComponent: .year, minimumUnit: 13, maximumUnit: 100)