NSDate时间显示样式
2015-09-01 本文已影响1200人
牧晓逸风
有时候需要对发表的说说或者日志的日期进行如下格式的显示:
* 发表时间和当前时间对比,显示发表时间为:
/**
今年
今天
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";
// 帖子创建时间
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;
}
}