UIDatePicker中的最小和最大date

我想从dateselect器中获取最小和最大date,但是最小date应该是当前date的“ – 18”,最大date应该是当前date的“ – 100”。

假设当前是2018年,那么我希望最低date为2000年,最长date为1918年。

我到目前为止所做的是:

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; 

但我不能得到这个整数我的date格式..

尝试这个:

 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; 

它可以很容易地转换成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 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)") 

这是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 

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 

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

最低date将是1900年1月1日。我希望它适用于你.. 🙂

在Swift 2.0或更高版本中

  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 

UIDatePicker中的最小和最大date:#Swift 3

如果你想select两个date值之间的最小和最大date使用下面的简单代码:

例如:最短date:01-04-2017和最大date: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 

另一个案例:

假设我想将出生date显示为dateselect器,Dob在1/1/1980至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 } 

Swift 4.0

UIDatePicker扩展

 extension UIDatePicker { func set18YearValidation() { let currentDate: NSDate = NSDate() let calendar: NSCalendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)! calendar.timeZone = NSTimeZone(name: "UTC")! as TimeZone let components: NSDateComponents = NSDateComponents() components.calendar = calendar as Calendar components.year = -18 let maxDate: NSDate = calendar.date(byAdding: components as DateComponents, to: currentDate as Date, options: NSCalendar.Options(rawValue: 0))! as NSDate components.year = -150 let minDate: NSDate = calendar.date(byAdding: components as DateComponents, to: currentDate as Date, options: NSCalendar.Options(rawValue: 0))! as NSDate self.minimumDate = minDate as Date self.maximumDate = maxDate as Date } }