2011-02-28 34 views

回答

10
[[[NSCalendar currentCalendar] components:NSYearCalendarUnit fromDate:birthDate toDate:[NSDate date] options:0] year] 

Jonathan Grynspan指出的那樣,這將是更好的:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
int years = [[gregorian components:NSYearCalendarUnit fromDate:birthDate toDate:[NSDate date] options:0] year]; 
[gregorian release]; 

,現在與ARC也可以是(過分)簡介:

int years = [[[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] components:NSYearCalendarUnit fromDate:birthDate toDate:[NSDate date] options:0] year]; 
+3

小心--'currentCalendar'是不保證是格里高利/太陽能。它在很多國家都是陰曆的。您需要特別使用格里曆日曆進行年齡計算。 – 2011-02-28 16:00:23

+0

完美。沒有檢查,當然沒有正確的解決方案。 – Lukasz 2011-02-28 16:36:48

-2

它應該這樣做像這樣:

NSTimeInterval interval = [birthday timeIntervalSinceNow]; 

if (interval > 18*365*24*60*60) { 
    NSLog(@"You're more than 18"); 
} 
+1

這不包括bisextil年和持續時間 – 2011-02-28 15:58:25

+0

是的......我想這樣做,但很快就認識到同樣的問題。 – Lukasz 2011-02-28 16:07:58

相關問題