Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to calculate the age based on NSDate

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

like image 974
Linux world Avatar asked Dec 16 '10 18:12

Linux world


People also ask

How do you calculate age?

The method of calculating age involves the comparison of a person's date of birth with the date on which the age needs to be calculated. The date of birth is subtracted from the given date, which gives the age of the person. Age = Given date - Date of birth.

How is age algorithm calculated?

age = INT((INTCK("month",dob,now) - (DAY(dob) > DAY(now)))/12); Essentially, this formula determines the number of months between DOB and NOW, decides whether to subtract 1, and then divides by 12 (the number of months in a year) to get number of years.

How do I tell age in Swift?

Swift 3. func calcAge(birthday: String) -> Int { let dateFormater = DateFormatter() dateFormater. dateFormat = "MM/dd/yyyy" let birthdayDate = dateFormater. date(from: birthday) let calendar: NSCalendar!


1 Answers

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)! } 
like image 158
cobbal Avatar answered Oct 20 '22 02:10

cobbal