2012-05-08 43 views
26

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

año en curso Supongamos que es 2018 entonces quiero fecha mínima de 2000 y la fecha máxima de 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 conseguir este entero en mi formato de fecha. .

+0

No está claro lo que está tratando de lograr. Simplemente diga qué años quiere mostrar u obtener de Date Picker. –

Respuesta

55

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; 

puede traducirse 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 
+0

Muchas gracias! – NSException

+0

Hola @tilto tu código es genial, pero también muestra la fecha de deshabilitación, ¿es posible ocultarlos? –

+0

¿Qué quiere decir con "fecha de discapacidad"? – tilo

14

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)") 
+1

El minDate y maxDate deben intercambiarse. – oOEric

2

En C Objetivo, 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 a enero de 1900. 01 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 
+0

Oye lo que es medio de composiciones (obj c) –

9

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 
0

Otro caso:

Supongamos que deseo 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 

} 
6

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 
+0

Woa, ¿por qué 'vamos componentes: NSDateComponents = NSDateComponents()' sólo para hacer 'componentes como DateComponents' tarde es tonto, acaba de empezar con 'let components = DateComponents()' Y usted es bueno. También necesitará declarar los componentes como var not a let. – HuXu7

2

** mínimo y la fecha máxima en UIDatePicker: #Swift

** si desea seleccionar los valores mínimo y máximo entre la fecha uso del valor de dos fechas debajo del código simple: **

Por ejemplo: Min Fecha: 04/01/2017 y Max Fecha: 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 
0

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 } }

+0

Hola, este código funciona, pero no es exactamente la sintaxis de swift4. NS son remanentes de la era Obj-C. Por la presente en la parte inferior proporcioné la versión correcta. – swift2geek

1

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 
    } } 
Cuestiones relacionadas