iOS 计算生日转化为年龄的方法

假设生日1977-8-1,当前日期2017-6-16,问:你今年多少岁?这时候根据生活中和实际档案上,我们说的年龄可能不一样,如果只用年份相减,可以说,40岁(不管你生日到了没,2017年都是40岁),但要精确到日期,因为你2017年生日还没到,可以说是39岁,生日过了之后,可以说40岁。一般生日没到大家更愿意说小一岁,也就是目前39岁,这也跟腾讯QQ上显示年龄一致。

1.根据出生日期返回年龄的方法

a、此方法有缺陷,除以年份按365天算的,并没有把闰年算进去,并不准:

-(NSString *)dateToOld:(NSDate *)bornDate{
//获得当前系统时间
NSDate *currentDate = [NSDate date];
//获得当前系统时间与出生日期之间的时间间隔
NSTimeInterval time = [currentDate timeIntervalSinceDate:bornDate];
//时间间隔以秒作为单位,求年的话除以60*60*24*356
int age = ((int)time)/(3600*24*365);
return [NSString stringWithFormat:@"%d",age];
}

b、以下方法更准,推荐

- (NSInteger)ageWithDateOfBirth:(NSDate *)date;  
{  
    // 出生日期转换 年月日  
    NSDateComponents *components1 = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:date];  
    NSInteger brithDateYear  = [components1 year];  
    NSInteger brithDateDay   = [components1 day];  
    NSInteger brithDateMonth = [components1 month];  
      
    // 获取系统当前 年月日  
    NSDateComponents *components2 = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];  
    NSInteger currentDateYear  = [components2 year];  
    NSInteger currentDateDay   = [components2 day];  
    NSInteger currentDateMonth = [components2 month];  
      
    // 计算年龄  
    NSInteger iAge = currentDateYear - brithDateYear - 1;  
    if ((currentDateMonth > brithDateMonth) || (currentDateMonth == brithDateMonth && currentDateDay >= brithDateDay)) {  
        iAge++;  
    }  
      
    return iAge;  
}  


2.根据出生日期返回详细的年龄(精确到天)


-(NSString *)dateToDetailOld:(NSDate *)bornDate{
//获得当前系统时间
NSDate *currentDate = [NSDate date];
//创建日历(格里高利历)
NSCalendar *calendar = [NSCalendar currentCalendar];
//设置component的组成部分
NSUInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond ;
//按照组成部分格式计算出生日期与现在时间的时间间隔
NSDateComponents *date = [calendar components:unitFlags fromDate:bornDate toDate:currentDate options:0];

//判断年龄大小,以确定返回格式
if( [date year] > 0)
{
    return [NSString stringWithFormat:(@"%ld岁%ld月%ld天"),(long)[date year],(long)[date month],(long)[date day]];

}
else if([date month] >0)
{
    return [NSString stringWithFormat:(@"%ld月%ld天"),(long)[date month],(long)[date day]];

}
else if([date day]>0)
{
    return [NSString stringWithFormat:(@"%ld天"),(long)[date day]];

}
else {
    return @"0天";
}
}

调用以上方法


NSString *birth = @"1995-10-30";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *birthDay = [dateFormatter dateFromString:birth];
NSLog(@"您的年龄:%@岁",[self dateToOld:birthDay]);
NSLog(@"您的年龄:%@",[self dateToDetailOld:birthDay]);
结果展示

2017-06-16 11:46:54.816 Test[7215:83685] 您的年龄:39岁
2017-06-16 11:46:54.817 Test[7215:83685] 您的年龄:39岁10月15天

方法转自:http://www.jianshu.com/p/fe6bd981b9f4

https://blog.csdn.net/liuyu1114/article/details/24771717

猜你喜欢

转载自blog.csdn.net/txz_gray/article/details/73324014