| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
10年前发布

根据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小时前";        }