In meinem Code unten habe ich eine Datumsauswahl implementiert, um die Unteransicht meines Textfelds zu sein. Ich bin auf der Funktion fest; 'verifyAge'. Die if-Anweisung in der Funktion funktioniert einwandfrei und ändert die textField-Farbe, wenn das Datumsauswahldatum über oder unter dem angegebenen Datum liegt. Aber es funktioniert nur bis zum entsprechenden Jahr Aber funktioniert nicht zum genauen Tag. Ich habe versucht, die letzten zwei Tage zu suchen und konnte keine Lösung für mein genaues Problem finden.Berechnen Alter von Datum Picker Swift 3
class AgeConfirmViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var txtAgeConfirmation: UITextField!
let datePicker: UIDatePicker = UIDatePicker()
override func viewDidLoad() {
super.viewDidLoad()
txtAgeConfirmation.delegate = self
createDatePicker()
}
func textFieldDidBeginEditing(_ textField: UITextField) {
txtAgeConfirmation.inputView = datePicker
datePicker.addTarget(self, action: #selector(self.datePickerChanged(sender:)), for: .valueChanged)
}
func datePickerChanged(sender: UIDatePicker) {
let formatter = DateFormatter()
formatter.timeStyle = .none
formatter.dateStyle = .long
txtAgeConfirmation.text = formatter.string(from: sender.date)
verifyAge()
}
func createDatePicker() {
datePicker.datePickerMode = .date
datePicker.maximumDate = Calendar.current.date(byAdding: .year, value: 0, to: Date())
}
func verifyAge() {
let dateOfBirth = datePicker.date
let today = Date()
let gregorian = NSCalendar(identifier: NSCalendar.Identifier.gregorian)
let age = gregorian?.components([.month, .day, .year], from: dateOfBirth, to: today, options:[])
if (age?.year)! < 21 {
txtAgeConfirmation.textColor = UIColor.red
} else if (age?.year)! > 21 {
txtAgeConfirmation.textColor = UIColor.black
}
}
Bitte klären Sie, wenn Sie brauchen, um auf den Tag zu sein. Das heißt, wenn das Alter 19 Jahre 11 Stunden 59 Minuten ist, dann sind sie nicht älter als 20 Jahre. Statt dessen geht es darum, ob sie in diesem Jahr 20 Jahre alt werden, aber noch nicht 20 Jahre alt sind. – MwcsMac
Es ist klargestellt. "Es funktioniert nur bis zum entsprechenden Jahr Aber funktioniert nicht zum genauen Tag". Ich will es genau zum Tag ja haben. – pjunior
Versuchen Sie diesen Code: http://stackoverflow.com/questions/27182023/getting-the-difference-between-two-nsdates-in-months-days-hours-minutes-seconds –