根据Date获取x分钟前/x小时前/昨天/x天前/x个月前/x年前的iOS代码详解手机开发

  返回x分钟前/x小时前/昨天/x天前/x个月前/x年前

    - (NSString *)timeInfo {   
        return [NSDate timeInfoWithDate:self];   
    }   
       
    + (NSString *)timeInfoWithDate:(NSDate *)date {   
        return [self timeInfoWithDateString:[self stringWithDate:date format:[self ymdHmsFormat]]];   
    }   
       
    + (NSString *)timeInfoWithDateString:(NSString *)dateString {   
        NSDate *date = [self dateWithString:dateString format:[self ymdHmsFormat]];   
           
        NSDate *curDate = [NSDate date];   
        NSTimeInterval time = -[date timeIntervalSinceDate:curDate];   
           
        int month = (int)([curDate month] - [date month]);   
        int year = (int)([curDate year] - [date year]);   
        int day = (int)([curDate day] - [date day]);   
           
        NSTimeInterval retTime = 1.0;   
        if (time < 3600) { // 小于一小时   
            retTime = time / 60;   
            retTime = retTime <= 0.0 ? 1.0 : retTime;   
            return [NSString stringWithFormat:@"%.0f分钟前", retTime];   
        } else if (time < 33600 * 24) { // 小于一天,也就是今天   
            retTime = time / 3600;   
            retTime = retTime <= 0.0 ? 1.0 : retTime;   
            return [NSString stringWithFormat:@"%.0f小时前", retTime];   
        } else if (time < 33600 * 224 * 2) {   
            return @"昨天";   
        }   
        // 第一个条件是同年,且相隔时间在一个月内   
        // 第二个条件是隔年,对于隔年,只能是去年12月与今年1月这种情况   
        else if ((abs(year) == 0 && abs(month) <= 1)   
                 || (abs(year) == 1 && [curDate month] == 1 && [date month] == 12)) {   
            int retDay = 0;   
            if (year == 0) { // 同年   
                if (month == 0) { // 同月   
                    retDay = day;   
                }   
            }   
               
            if (retDay <= 0) {   
                // 获取发布日期中,该月有多少天   
                int totalDays = (int)[self daysInMonth:date month:[date month]];   
                   
                // 当前天数 + (发布日期月中的总天数-发布日期月中发布日,即等于距离今天的天数)   
                retDay = (int)[curDate day] + (totalDays - (int)[date day]);   
            }   
               
            return [NSString stringWithFormat:@"%d天前", (abs)(retDay)];   
        } else  {   
            if (abs(year) <= 1) {   
                if (year == 0) { // 同年   
                    return [NSString stringWithFormat:@"%d个月前", abs(month)];   
                }   
                   
                // 隔年   
                int month = (int)[curDate month];   
                int preMonth = (int)[date month];   
                if (month == 12 && preMonth == 12) {// 隔年,但同月,就作为满一年来计算   
                    return @"1年前";   
                }   
                return [NSString stringWithFormat:@"%d个月前", (abs)(12 - preMonth + month)];   
            }   
               
            return [NSString stringWithFormat:@"%d年前", abs(year)];   
        }   
           
        return @"1小时前";   
    }  

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/3383.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论