How to calculate the age based on NSDate

后端 未结 11 1923
孤街浪徒
孤街浪徒 2020-12-04 09:07

how to calculate the age based on the birth date in this format 6/24/1976 mon/date/year...

11条回答
  •  一整个雨季
    2020-12-04 09:22

    Many of these answers don't properly account for leap years and such, best is to use Apple's methods instead of dividing by constants.

    Swift

    let birthday: NSDate = ...
    let now = Date()
    let ageComponents = calendar.dateComponents([.year], from: birthday, to: now)
    let age = ageComponents.year
    

    Objective-C

    NSDate* birthday = ...;
    
    NSDate* now = [NSDate date];
    NSDateComponents* ageComponents = [[NSCalendar currentCalendar] 
                                       components:NSCalendarUnitYear 
                                       fromDate:birthday
                                       toDate:now
                                       options:0];
    NSInteger age = [ageComponents year];
    

    I think this is cleaner and more accurate than any of the other answers here.

    Edit

    Increase accuracy by setting both birthday and now to noon. Here is one way to do that with a Date extension (in Swift)...

    /// Returns a new date identical to the receiver except set to precisely noon.
    /// Example: let now = Date().atNoon()
    func atNoon() -> Date {
        var components = (Calendar.current as NSCalendar).components([.day, .month, .year, .era, .calendar, .timeZone], from: self)
        components.hour = 12
        components.minute = 0
        components.second = 0
        components.nanosecond = 0
        return Calendar.current.date(from: components)!
    }
    

提交回复
热议问题