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

来源:互联网 发布:菜鸟物流打印软件 编辑:程序博客网 时间:2024/05/21 22:25

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

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

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

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