2014-11-06 2 views
0

Я хочу рассчитать возраст в виде X лет Y месяцев Z дней. Вот мой кодКак рассчитать возраст в ios?

NSString *dateString = @"15-Sep-1997"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
[dateFormatter setDateFormat:@"dd-MMM-yyyy"]; 

NSDate *PrevDate = [dateFormatter dateFromString:dateString]; 


NSDate *today = [NSDate date]; 
NSLog(@"Prev date = %@", PrevDate); 
NSLog(@"today =%@", today); 
NSInteger years; 
NSInteger months; 
NSInteger days; 

NSCalendar *calendar = [NSCalendar currentCalendar]; 
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; 
NSDateComponents *dateComponentsNow = [calendar components:unitFlags fromDate:today]; 
NSDateComponents *dateComponentsBirth = [calendar components:unitFlags fromDate:PrevDate]; 

if (([dateComponentsNow month] < [dateComponentsBirth month]) || 
    (([dateComponentsNow month] == [dateComponentsBirth month]) && ([dateComponentsNow day] < [dateComponentsBirth day]))) { 
    years = [dateComponentsNow year] - [dateComponentsBirth year] - 1; 
} else { 
    years = [dateComponentsNow year] - [dateComponentsBirth year]; 
    months = [dateComponentsNow month] - [dateComponentsBirth month]; 
    days = [dateComponentsNow day] - [dateComponentsBirth day]; 
} 


NSLog(@"%d years %d months %d days", years, months, days); 

Выход приходит: 17 лет 2 месяца -9 дней (это занимает один месяц больше и вычитать дни) Правильный выход: 17 лет 1 месяц 22 дней (до даты Todays)

+1

просто посмотрите, что -> http://stackoverflow.com/questions/4463893/how-to-calculate-the-age-based-on-date –

+0

Я уже пробовал, но не получал точный результат – vishnu

+0

попробуйте это -> http : //stackoverflow.com/questions/19202120/how-to-compute-age-from-nsdate –

ответ

8

Проверьте код.

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd-MMM-yyyy"]; 
NSDate *startD = [dateFormatter dateFromString:@"15-Sep-1997"]; 
NSDate *endD = [NSDate date]; 

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSUInteger unitFlags = NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond; 
NSDateComponents *components = [calendar components:unitFlags fromDate:startD toDate:endD options:0]; 

NSInteger year = [components year]; 
NSInteger month = [components month]; 
NSInteger day = [components day]; 

NSLog(@"%ld:%ld:%ld", (long)year, (long)month,(long)day); 

и выход

17: 1: 22

Может быть, это поможет вам.

+0

отлично работает, большое спасибо. – vishnu