封装时间判断
我们会在发朋友圈时候,会有个时间显示,这种时间显示和我上午给大家封装的不一样,上午的是那种显示具体时间。可是有时候我们产品需求是和微信一样显示
比如:这种需求
@"刚刚" \ @"10分钟前" \ @"5小时前" \ @"昨天 09:10:05" \ @"11-20 09:10:05" \ @"2016-8-10 04:10:05"
开始
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这个日期是否为今年 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这个日期是否为今天 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这个日期是否为今天 // 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这个日期是否为昨天 // 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; }