以下のコードでは、日付ピッカーをテキストフィールドのサブビューとして実装しました。私はその機能についていません。 'verifyAge'。関数内のifステートメントは正常に動作しており、日付ピッカーの日付が指定した日付よりも上または下の場合にtextFieldの色が変更されます。しかしそれは対応する年にしか働くが、正確な日には働かない。私は過去2日間の検索を試みましたが、私の正確な問題の解決策を見つけることができませんでした。Date Picker Swiftからの年齢の計算3
let gregorian = Calendar(identifier: .gregorian)
let ageComponents = gregorian.dateComponents([.year], from: dateOfBirth, to: Date())
let age = ageComponents.year!
txtAgeConfirmation.textColor = age < 21 ? .red : .black
それとも、時間にスウィフト3では
let ageComponents = calendar.dateComponents([.year], from: calendar.startOfDay(for: dateOfBirth), to: calendar.startOfDay(for: Date()))
を無視したい場合は以下の質問と感嘆符は、ネイティブ使用してあります。
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
}
}
この日までに必要な場合は、明確にしてください。意味は19歳11時59分の場合は20歳の肉はしません。あなたが今年に20歳になるだろうが、まだ20歳になっていない場合は、代わりにあなたが得ている。 – MwcsMac
明らかになりました。 「それは対応する年にしか働くが、正確な日には働かない」。私はそれが正しい日であることを希望します。 – pjunior
このコードを試してください:http://stackoverflow.com/questions/27182023/getting-the-difference-between-two-nsdates-in-months-days-hours-minutes-seconds –