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