将当前日期与Swift中的DatePicker值进行比较

时间:2015-02-22 22:37:25

标签: ios swift uidatepicker

在我的应用中,用户可以选择他们是否未满18岁或超过18岁。用户使用日期选择器输入他们的出生日期。我需要创建一个函数,将MM / DD / YYYY格式的当前日期与DatePicker日期进行比较,以查看用户输入的年龄是否超过18岁。

我将DatePicker文本设置为关联文本字段的当前功能是:

func updatePicker() {
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "MM/dd/yyyy"
    dob.text = dateFormatter.stringFromDate(datePickerView.date)
}

当用户尝试转到下一页时,表单会被验证,即我需要比较日期并在18岁以下时显示提醒。

不知道从哪里开始进行日期字符串评估。

3 个答案:

答案 0 :(得分:0)

使用此功能比较日期

func compareDate(date1: NSDate!, toDate date2: NSDate!, toUnitGranularity unit: NSCalendarUnit) -> NSComparisonResult

请参阅此question

答案 1 :(得分:0)

不要将日期转换为文本,然后再将文本转换为日期。 只需保留datePicker中的日期,直到您需要它进行验证。

有一个成员变量var selectedDate : NSDate?

然后检查是否超过18岁

if let userDate=self.selectedDate {
    if(NSDate().timeIntervalSinceDate(userDate) >= (568024668 /*18 years in seconds*/) {
        .... /*is 18*/
    }
}

答案 2 :(得分:0)

您可以使用NSCalendar组件方法并从两个日期中提取NSCalendarUnit.CalendarUnitYear差异:

extension NSDate {
    var is18yearsOld:Bool {
        return NSDate().yearsFrom(self) > 18
    }
    func yearsFrom(date:NSDate)   -> Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitYear, fromDate: date, toDate: self, options: nil).year }
}

let dob1 = NSCalendar.currentCalendar().dateWithEra(1, year: 1970, month: 3, day: 27, hour: 7, minute: 19, second: 26, nanosecond: 0)!
let dob2 = NSCalendar.currentCalendar().dateWithEra(1, year: 2000, month: 3, day: 27, hour: 7, minute: 19, second: 26, nanosecond: 0)!
let is18years1 = dob1.is18yearsOld    // true
let is18years2 = dob2.is18yearsOld    // false