LoginSignup
2
4

More than 5 years have passed since last update.

swift4 UIDatePickerの指定した年月日から年齢を出力するコード

Posted at

前回、「swift4 UIDatePickerからUITextfieldへ出力まで」で記事を書いたので
その続きの、

「UIDatePickerの指定した年月日から年齢を出力するコード」
https://qiita.com/ryomaDsakamoto/items/ab4ae031706a8133f193

について書いていきます。

そのコードがこいつ。※前回の記事を参照しながらどうぞ。

BirthdayViewController.swift
import UIKit

class BirthdayViewController: UIViewController {

    //UITextfieldに紐づいてる
    @IBOutlet weak var dateField: UITextField!

    //UIDatePickerを定義するための変数
    var datePicker: UIDatePicker = UIDatePicker()


    override func viewDidLoad() {
        super.viewDidLoad()

        // ピッカー設定
        datePicker.datePickerMode = UIDatePickerMode.date
        datePicker.timeZone = NSTimeZone.local
        datePicker.locale = Locale.current
        dateField.inputView = datePicker

        // 決定バーの生成
        let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 35))
        let spacelItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
        let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(done))
        toolbar.setItems([spacelItem, doneItem], animated: true)

        // インプットビュー設定(紐づいているUITextfieldへ代入)
        dateField.inputView = datePicker
        dateField.inputAccessoryView = toolbar
    }

    // UIDatePickerのDoneを押したら発火
    @objc func done() {
        dateField.endEditing(true)

        // 日付のフォーマット
        let formatter = DateFormatter()

        //"yyyy年MM月dd日"を"yyyy/MM/dd"したりして出力の仕方を好きに変更できるよ
        formatter.dateFormat = "yyyy年MM月dd日"

        //(from: datePicker.date))を指定してあげることで
        //datePickerで指定した日付が表示される
        dateField.text = "\(formatter.string(from: datePicker.date))"


        // 本当はNSDate()じゃない方がいいと思う。
        let now = Date()
        print("今日は\(now))です")

        let Age = now.timeIntervalSince(datePicker.date)//生まれてからの秒数

        let myAge2 = Int(Age)//秒齢
        let myAge3 = Double(myAge2)
        let myAge4 = Int(myAge2/60/60/24)//日齢
        let myAge5 = Int(myAge3/60/60/24/365.24)//年齢_端数の切り捨て:満年齢:整数Integer

        //ログから出力されていることを確認、
        print("年齢は満\(myAge5)歳です")



    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

実際のpickerで確認すると、こんな感じで出力されているはず。
スクリーンショット 2018-09-12 2.04.42.png

あとはlabelで出力したいtextで出力したりやりたい放題です。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4