我想把目前日期的最短日期设定为1987年 . 我已经成功实现了这一点,但我无法弄清楚为什么过去几个月从现在的几个月都禁用了字段 .
就像今天的当前月份是8月那么如果我选择1987年作为年份,那么8月份之前的月份将被禁用 . 我无法弄清楚为什么会发生这种情况?
这是我计算最大和最小日期的代码:
let currentDate: NSDate = NSDate()
let calendar: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
// let calendar: NSCalendar = NSCalendar.currentCalendar()
let components: NSDateComponents = NSDateComponents()
components.calendar = calendar
components.year = -30
components.day = -0
components.month = -0
let minDate: NSDate = calendar.dateByAddingComponents(components, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))!
components.year = -0
components.day = -0
components.month = -0
let maxDate: NSDate = calendar.dateByAddingComponents(components, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))!
self.datePicker.datePicker.maximumDate = maxDate
self.datePicker.datePicker.minimumDate = minDate
print("minDate is the: \(minDate)")
print("maxDate is the: \(maxDate)")
它适用于1987年之后的日期 . 即使是1987年,我想要启用所有月份和日期
2 回答
如果你想从今天减去30年并获得年初(1月1日)使用
它仅从当前日期中提取
year
组件并减去30.由于未指定month
和day
,因此分别考虑值1 .代码是用Swift 3编写的,强烈建议更新 . Swift 4即将推出 .
它的作用非常有意义 . 如果您构建一个1987年8月5日的日期,并将其安装为日期选择器的最短日期,那么您告诉日期选择器用户不应该选择比此更早的日期 . 如果用户选择1987年,那么比8月早一个月小于指定的最小日期 . 它不会让用户在1987年8月5日之前选择一个日期 .
编辑
如果你想在1987年允许任何日期,你应该在1987年1月1日的日期选择器中设置最小日期 . 你可以通过将月份和日期都设置为1来完成日期组件 .