首页 文章

Swift:在减去Date时无法正确处理日期函数:

提问于
浏览
1

我想把目前日期的最短日期设定为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 回答

  • 2

    如果你想从今天减去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.由于未指定 monthday ,因此分别考虑值1 .

    代码是用Swift 3编写的,强烈建议更新 . Swift 4即将推出 .

  • 2

    它的作用非常有意义 . 如果您构建一个1987年8月5日的日期,并将其安装为日期选择器的最短日期,那么您告诉日期选择器用户不应该选择比此更早的日期 . 如果用户选择1987年,那么比8月早一个月小于指定的最小日期 . 它不会让用户在1987年8月5日之前选择一个日期 .

    编辑

    如果你想在1987年允许任何日期,你应该在1987年1月1日的日期选择器中设置最小日期 . 你可以通过将月份和日期都设置为1来完成日期组件 .

相关问题