根据Date获取x分钟前/x小时前/昨天/x天前/x个月前/x年前的iOS代码

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

  返回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小时前";  
    }