簡體   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