繁体   English   中英

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

[英]Compare Current Date to DatePicker Value in Swift

在我的应用程序中,用户可以选择他们是 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 岁以下时显示警报。

只是不确定从哪里开始日期字符串评估。

使用此功能比较日期

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

看到这个问题

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

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

然后检查是否超过18岁

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

您可以使用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

首先,您必须使用 Calendar 组件方法以 Int 类型获取部分日期:

// Current date
let currentDate = Date()
let calendar = Calendar.current
                
let currentYear = calendar.component(.year, from: currentDate) //year: Int
let currentMonth = calendar.component(.month, from: currentDate) //month: Int
let currentDay = calendar.component(.day, from: currentDate) //day: Int


// DatePicker's date
let yearFromDatePicker = calendar.component(.year, from: datePicker.date) //year: Int
let monthFromDatePicker = calendar.component(.month, from: datePicker.date) //month: Int
let dayFromDatePicker = calendar.component(.day, from: datePicker.date) //day: Int

然后您可以根据您的条件将日期的各个部分相互比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM