ios 年龄的时间换算

本文介绍了在iOS应用中如何进行年龄计算,通过将时间转换为数字(年份*10000+月份*100+日期),然后用当前时间减去出生日期来获取精确的年龄数据,确保客户端与服务器数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

App中经常会用到用户的年岭(比如 3岁零5个月),一般都是服务器换算后返回,但是也不免会有客户端换算的情况,为了确保年龄的数据一致,在做之前和我们的服务器程序员做了一次沟通,效仿他的代码写了下面的换算。

-(NSString *)guideShowWithTime:(NSString *)time{
   
    //获取当前的 年 月 日
    NSString *subTime = [time substringToIndex:10];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy.MM.dd";
    NSDate *currentData = [formatter dateFromString:subTime];
    NSDateComponents *currentComponents =[[NSCalendar currentCalendar] components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:currentData];
    NSInteger currentDateYear = [currentComponents year];
    NSInteger currentDateMonth = [currentComponents month];
    NSInteger currentDateDay = [currentComponents day];
   
    //获取用户的 年 月 日
    NSDateFormatter *userFormatter = [[NSDateFormatter alloc] init];
    userFormatter.dateFormat = @"yyyy-MM-dd";
    User *user = [[UserManager sharedUserManager] user];
    NSDate *userDate = [userFormatter dateFromString:[user babyBirthday]];
    NSDateComponents *userComponents =[[NSCalendar currentCalendar] components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:userDate];
    NSInteger userDateYear = [userComponents year];
    NSInteger userDateMonth = [userComponents month];
    NSInteger userDateDay = [userComponents day];
   
    NSMutableString *dateStr = [NSMutableString string];
    int currentNumb = currentDateYear *10000+currentDateMonth*100+currentDateDay;
    int userNumb = userDateYear*10000 + userDateMonth*100 +userDateDay;
    int ageNumb = currentNumb - userNumb;
    if (ageNumb<0) {//备孕
        int dist = userNumb - currentNumb;
        if (dist>280) {//备孕期
            [dateStr appendString:@"备孕期"];
        }else{//孕期
            int week  =(280-dist)/7;
            [dateStr appendFormat:@"孕期%d周",week];
//            self.guideValue = @"-10";
        }
    }
   
    int years = 0;
    int months = 0;
    int days = 0;
    if (ageNumb>=10000) {//有一岁
        years = ageNumb/10000;
    }
    ageNumb = ageNumb%10000;
    months = ageNumb/100;
    if (months>12) {
        months -=88;
    }
    days = ageNumb%100;
    //当月第一天
    NSString *firstStr = [NSString stringWithFormat:@"%d.%d.01",currentDateYear,currentDateMonth];
    NSDate *firstDay = [formatter dateFromString:firstStr];
    NSTimeInterval firstInterval = [firstDay timeIntervalSince1970];
    NSTimeInterval lastInterval =  firstInterval-24*3600;//上个月的最后一天
    NSDate *lastDay = [NSDate dateWithTimeIntervalSince1970:lastInterval];
    //上个月的天数
    NSRange range = [[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:lastDay];
    NSUInteger numberOfDaysInMonth = range.length;
    if (days>currentNumb%100) {
        days = days-(100-numberOfDaysInMonth);
    }
   
    if (years>0) {
        [dateStr appendFormat:@"%d岁",years];
    }
    if (months>0) {
        [dateStr appendFormat:@"%d月",months];
    }
    if (days>0) {
        [dateStr appendFormat:@"%d天",days];
    }
//    self.age = dateStr;
    return dateStr;
//    self.guideValue =[NSString stringWithFormat:@"%d%d",years,months];
//    if (days==0) {
//        return YES;
//    }
//    NSLog(@"dateStr ...%@",dateStr);
//    return NO;
}

下面简单说一下算法原理:

1.把时间转换成数字

 年份*10000+月份*100+日期,(2013-9-22 转换后为20130922)

2.当前时间减去生日当天得到差值

    int currentNumb = currentDateYear *10000+currentDateMonth*100+currentDateDay;
    int userNumb = userDateYear*10000 + userDateMonth*100 +userDateDay;
    int ageNumb = currentNumb - userNumb;

3.除以10000换算岁数

int years = 0;
    int months = 0;
    int days = 0;
    if (ageNumb>=10000) {//有一岁
        years = ageNumb/10000;
    }
4.换算月数,(为什么要-88,注:88+12=100)

 ageNumb = ageNumb%10000;
    months = ageNumb/100;
    if (months>12) {
        months -=88;
    }

5换算天数,天数换算要减去上个月的天数,所以用当月的第一天减去24小时就是上个月的最后一天,然后获取上月总天数

days = ageNumb%100;
    //当月第一天
    NSString *firstStr = [NSString stringWithFormat:@"%d.%d.01",currentDateYear,currentDateMonth];
    NSDate *firstDay = [formatter dateFromString:firstStr];
    NSTimeInterval firstInterval = [firstDay timeIntervalSince1970];
    NSTimeInterval lastInterval =  firstInterval-24*3600;//上个月的最后一天
    NSDate *lastDay = [NSDate dateWithTimeIntervalSince1970:lastInterval];
    //上个月的天数
    NSRange range = [[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:lastDay];
    NSUInteger numberOfDaysInMonth = range.length;
    if (days>currentNumb%100) {
        days = days-(100-numberOfDaysInMonth);
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值