时间格式化为"刚刚,几分钟前,几小时前,昨天...&q
2016-10-10 本文已影响150人
KevinTing
如果你的app中有时间描述,比如下面:
Paste_Image.png你要是老老实实地写“2016-10-10 8:45”那么就太out了,比起一串冷冷的数字,像“刚刚,3分钟前,昨天”等等表达显然更加温暖更加亲切。以发表一个微博为例,下面就是一种对时间的分类表达:
1、在一分钟之内刚发表的微博——"刚刚"
2、一个小时之内发表的——"XX分钟前"
3、今天发表的——"XX小时前"
4、昨天发表的——"昨天"
5、今年发表的——"月-日"
6、非今年发表的——"年-月-日"
除了用亲切的词汇表达之外,时间由近及远关注点也不一样,比如时间较近就关注分钟,小时,时间较远就关注日期,这样也比较合乎人们的习惯。NSCalendar类给我们提供了处理时间非常简便的方法,利用NSCalendar可以很快实现上面的时间分类转换:
// NSDate+CommonString.h
#import <Foundation/Foundation.h>
@interface NSDate (CommonString)
- (NSString *)commonString;
@end
// NSDate+CommonString.m
#import "NSDate+CommonString.h"
@implementation NSDate (CommonString)
- (NSString *)commonString
{
NSDate *currentDate = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
if ([calendar isDate:self equalToDate:currentDate toUnitGranularity:NSCalendarUnitYear]) {
if ([calendar isDateInToday:self]) {
NSDateComponents *components = [calendar components:NSCalendarUnitMinute | NSCalendarUnitHour fromDate:self toDate:currentDate options:0];
if (components.hour == 0) {
if (components.minute == 0) {
return @"刚刚";
} else {
return [NSString stringWithFormat:@"%ld分钟前", (long)components.minute];
}
} else {
return [NSString stringWithFormat:@"%ld小时前", (long)components.hour];
}
} else if ([calendar isDateInYesterday:self]) {
return @"昨天";
} else {
[fmt setDateFormat:@"M-d"];
return [fmt stringFromDate:self];
}
} else {
[fmt setDateFormat:@"yyyy-M-d"];
return [fmt stringFromDate:self];
}
return nil;
}
@end