我們會(huì)在發(fā)朋友圈時(shí)候,會(huì)有個(gè)時(shí)間顯示,這種時(shí)間顯示和我上午給大家封裝的不一樣,上午的是那種顯示具體時(shí)間。可是有時(shí)候我們產(chǎn)品需求是和微信一樣顯示
比如:這種需求
@"剛剛" \ @"10分鐘前" \ @"5小時(shí)前" \ @"昨天 09:10:05" \ @"11-20 09:10:05" \ @"2016-8-10 04:10:05"
開(kāi)始
Snip20160810_1.png
Snip20160810_2.png
第一步:
Snip20160810_3.png
+ (instancetype)calendar;
第二步:
Snip20160810_4.png
+ (instancetype)calendar
{
if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
return [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
} else {
return [NSCalendar currentCalendar];
}
}
第三步:
Snip20160810_5.png
Snip20160810_6.png
Snip20160810_7.png
/**
* 是否為今年
*/
- (BOOL)isThisYear;
/**
* 是否為今天
*/
- (BOOL)isToday;
/**
* 是否為昨天
*/
- (BOOL)isYesterday;
/**
* 是否為明天
*/
- (BOOL)isTomorrow;
第四步:
Snip20160810_8.png
Snip20160810_9.png
Snip20160810_10.png
- (BOOL)isThisYear
{
// 判斷self這個(gè)日期是否為今年
NSCalendar *calendar = [NSCalendar calendar];
// 年
NSInteger selfYear = [calendar component:NSCalendarUnitYear fromDate:self];
NSInteger nowYear = [calendar component:NSCalendarUnitYear fromDate:[NSDate date]];
return selfYear == nowYear;
}
//- (BOOL)isThisYear
//{
// NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
// fmt.dateFormat = @"yyyy";
//
// // 年
// NSString *selfYear = [fmt stringFromDate:self];
// NSString *nowYear = [fmt stringFromDate:[NSDate date]];
//
// return [selfYear isEqualToString:nowYear];
//}
- (BOOL)isToday
{
// 判斷self這個(gè)日期是否為今天
NSCalendar *calendar = [NSCalendar calendar];
// 獲得年月日元素
NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *selfCmps = [calendar components:unit fromDate:self];
NSDateComponents *nowCmps = [calendar components:unit fromDate:[NSDate date]];
return selfCmps.year == nowCmps.year
&& selfCmps.month == nowCmps.month
&& selfCmps.day == nowCmps.day;
}
//- (BOOL)isToday
//{
// // 判斷self這個(gè)日期是否為今天
// NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
// fmt.dateFormat = @"yyyyMMdd";
//
// NSString *selfString = [fmt stringFromDate:self];
// NSString *nowString = [fmt stringFromDate:[NSDate date]];
//
// return [selfString isEqualToString:nowString];
//}
- (BOOL)isYesterday
{
// 判斷self這個(gè)日期是否為昨天
// self == 2015-10-31 23:07:08 -> 2015-10-31 00:00:00
// now == 2015-11-01 14:39:20 -> 2015-11-01 00:00:00
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyyMMdd";
NSString *selfString = [fmt stringFromDate:self]; // 20151031
NSString *nowString = [fmt stringFromDate:[NSDate date]]; // 20151101
NSDate *selfDate = [fmt dateFromString:selfString]; // 2015-10-31 00:00:00
NSDate *nowDate = [fmt dateFromString:nowString]; // 2015-11-01 00:00:00
NSCalendar *calendar = [NSCalendar calendar];
NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *cmps = [calendar components:unit fromDate:selfDate toDate:nowDate options:0];
return cmps.year == 0
&& cmps.month == 0
&& cmps.day == 1;
}
- (BOOL)isTomorrow
{
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyyMMdd";
NSString *selfString = [fmt stringFromDate:self]; // 20151031
NSString *nowString = [fmt stringFromDate:[NSDate date]]; // 20151101
NSDate *selfDate = [fmt dateFromString:selfString]; // 2015-10-31 00:00:00
NSDate *nowDate = [fmt dateFromString:nowString]; // 2015-11-01 00:00:00
NSCalendar *calendar = [NSCalendar calendar];
NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *cmps = [calendar components:unit fromDate:selfDate toDate:nowDate options:0];
return cmps.year == 0
&& cmps.month == 0
&& cmps.day == -1;
}