返回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 < 3600 * 24) { // 小於一天,也就是今天 retTime = time / 3600; retTime = retTime <= 0.0 ? 1.0 : retTime; return [NSString stringWithFormat:@%.0f小時前, retTime]; } else if (time < 3600 * 24 * 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小時前; }