Calculate age from birth date

前端 未结 4 720
北荒
北荒 2020-12-09 06:34

I cant find age in from birth date. What I got is

fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb) 

My code

相关标签:
4条回答
  • 2020-12-09 07:04

    In Swift 2.0+ age computing code should look something like this:

    extension NSDate {
        var age:Int {
            return NSCalendar.currentCalendar()
                .components(NSCalendarUnit.Year, 
                            fromDate: self, 
                            toDate: NSDate(),
                            options: NSCalendarOptions(rawValue: 0)
                .year
        }
    }
    
    0 讨论(0)
  • 2020-12-09 07:06

    Important:

    The timezone must be set to create a UTC birth date otherwise there will be inconsistencies between timezones.

    Swift 3

    extension Date {
    
        //An integer representation of age from the date object (read-only).
        var age: Int {
            get {
                let now = Date()
                let calendar = Calendar.current
    
                let ageComponents = calendar.dateComponents([.year], from: self, to: now)
                let age = ageComponents.year!
                return age
            }
        }
    
        init(year: Int, month: Int, day: Int) {
            var dc = DateComponents()
            dc.year = year
            dc.month = month
            dc.day = day
    
            var calendar = Calendar(identifier: .gregorian)
            calendar.timeZone = TimeZone(secondsFromGMT: 0)!
            if let date = calendar.date(from: dc) {
                self.init(timeInterval: 0, since: date)
            } else {
                fatalError("Date component values were invalid.")
            }
        }
    
    }
    

    Usage:

    let dob = Date(year: 1975, month: 1, day: 1)
    let age = dob.age
    
    print(age)
    
    0 讨论(0)
  • 2020-12-09 07:15

    update: Xcode 11 • Swift 5.1

    You can use the Calendar method dateComponents to calculate how many years from a specific date to today:

    extension Date {
        var age: Int { Calendar.current.dateComponents([.year], from: self, to: Date()).year! }
    }
    

    let dob = DateComponents(calendar: .current, year: 2000, month: 6, day: 30).date!
    let age = dob.age // 19
    

    0 讨论(0)
  • 2020-12-09 07:20

    Just use the DateTools pod. Absolutely the easiest way. https://github.com/MatthewYork/DateTools

    For Swift 3

    import DateTools
    
    let birthday: Date = ....
    let ageString = String((Date() as NSDate).years(from: birthday))
    
    0 讨论(0)
提交回复
热议问题