Swift:减去日期时无法正确处理日期函数:
Swift: Cannot handle the date function properly while subtracting the Date:
我正在尝试将最小日期设置为从当前日期算起的 1987 年。我已经成功实现了这一点,但我无法弄清楚为什么从现在开始的过去几个月的字段被禁用。
就像今天的当前月份是八月那么如果我 select 1987 作为年份那么八月之前的月份是 disabled.I 无法弄清楚为什么会这样?
这是我计算最大和最小日期的代码:
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.I 之后的日期工作正常想要启用所有月份和日期,即使是 1987 年
它的所作所为非常有意义。如果您构建一个 1987 年 8 月 5 日的日期,并将其安装为日期选择器的最短日期,那么您就是在告诉日期选择器用户不应该 select 早于该日期的日期。如果用户 select 是 1987 年,则比指定的最短日期早于八月的一个月。它不会让用户选择 1987 年 8 月 5 日之前的日期。
编辑
如果您想允许 1987 年的任何日期,您应该在日期选择器中将最小日期设置为 1987 年 1 月 1 日。您可以通过将月份和日期都设置为 1 来使用日期组件来做到这一点。
如果您想从今天减去 30 年并得到年初(1 月 1 日),请使用
let calendar = Calendar.current
var components = calendar.dateComponents([.year], from: Date())
components.year! -= 30
let minDate = calendar.date(from: components)!
它只从当前日期中提取 year
部分并减去 30。由于 month
和 day
没有指定,因此分别考虑值 1。
代码写在Swift3,强烈建议更新。 Swift 4 即将到来。
我正在尝试将最小日期设置为从当前日期算起的 1987 年。我已经成功实现了这一点,但我无法弄清楚为什么从现在开始的过去几个月的字段被禁用。
就像今天的当前月份是八月那么如果我 select 1987 作为年份那么八月之前的月份是 disabled.I 无法弄清楚为什么会这样?
这是我计算最大和最小日期的代码:
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.I 之后的日期工作正常想要启用所有月份和日期,即使是 1987 年
它的所作所为非常有意义。如果您构建一个 1987 年 8 月 5 日的日期,并将其安装为日期选择器的最短日期,那么您就是在告诉日期选择器用户不应该 select 早于该日期的日期。如果用户 select 是 1987 年,则比指定的最短日期早于八月的一个月。它不会让用户选择 1987 年 8 月 5 日之前的日期。
编辑
如果您想允许 1987 年的任何日期,您应该在日期选择器中将最小日期设置为 1987 年 1 月 1 日。您可以通过将月份和日期都设置为 1 来使用日期组件来做到这一点。
如果您想从今天减去 30 年并得到年初(1 月 1 日),请使用
let calendar = Calendar.current
var components = calendar.dateComponents([.year], from: Date())
components.year! -= 30
let minDate = calendar.date(from: components)!
它只从当前日期中提取 year
部分并减去 30。由于 month
和 day
没有指定,因此分别考虑值 1。
代码写在Swift3,强烈建议更新。 Swift 4 即将到来。