有時候需要對發(fā)表的說說或者日志的日期進行如下格式的顯示:
* 發(fā)表時間和當前時間對比,顯示發(fā)表時間為:
/**
今年
今天
1分鐘內
剛剛
1小時內
xx分鐘前
其他
xx小時前
昨天
昨天 18:56:34
其他
06-23 19:56:23
非今年
2014-05-08 18:45:30
*/
給NSDate添加一個分類
分類方法如下:
@implementation NSDate (HLExtension)
/**
* 比較兩個日期之間的差值
*/
- (NSDateComponents *)deltaFromDate:(NSDate *)fromDate
{
// 日歷
NSCalendar *calender = [NSCalendar currentCalendar];
// 比較時間
NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
// 返回日期的差值
return [calender components:unit fromDate:fromDate toDate:self options:0];
}
/**
* 判斷是否為今年
*/
- (BOOL)isThisYear
{
// 日歷
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger nowYear = [calendar component:NSCalendarUnitYear fromDate:[NSDate date]];
NSInteger selfYear = [calendar component:NSCalendarUnitYear fromDate:self];
return nowYear == selfYear;
}
/**
* 判斷是否為今天
*/
- (BOOL)isToday
{
// 2015-07-28 18:30:00 -> 2015-07-28
// 日期格式化類
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd";
// 日期轉化為字符串
NSString *nowString = [fmt stringFromDate:[NSDate date]];
NSString *selfString = [fmt stringFromDate:self];
return [nowString isEqualToString:selfString];
}
/**
* 判斷是否為昨天
*/
-(BOOL)isYesterDay
{
// 2015-07-28 18:30:00 -> 2015-07-28
// 日期格式化類
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd";
// 轉換日期
NSDate *nowDate = [fmt dateFromString:[fmt stringFromDate:[NSDate date]]];
NSDate *selfDate = [fmt dateFromString:[fmt stringFromDate:self]];
// 日歷(比較時間)
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *cmps = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:selfDate toDate:nowDate options:0];
return cmps.year == 0 && cmps.month == 0 && cmps.day == 1;
}
@end
在使用的時候進行相應的判斷铃彰,就可以返回期望的時間格式
/**
* 重寫create_time的get方法
*/
- (NSString *)create_time
{
// 日期格式化類
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
// 帖子創(chuàng)建時間
NSDate *createDate = [fmt dateFromString:_create_time];
if (createDate.isThisYear) { // 今年
if (createDate.isToday) { // 今天
NSDateComponents *cmps = [[NSDate date] deltaFromDate:createDate];
if (cmps.hour >= 1) { // 1個小時 > 時間差
return [NSString stringWithFormat:@"%zd小時前", cmps.hour];
} else if (cmps.minute >= 1) { // 1個小時 > 時間差 > 1分鐘
return [NSString stringWithFormat:@"%zd分鐘前", cmps.minute];
} else { // 1分鐘 > 時間差
return @"剛剛";
}
} else if (createDate.isYesterDay) {
fmt.dateFormat = @"昨天 HH:mm:ss";
return [fmt stringFromDate:createDate];
} else { // 其他
fmt.dateFormat = @"MM-dd HH:mm:ss";
return [fmt stringFromDate:createDate];
}
} else { // 非今年
return _create_time;
}
}