我们会在发朋友圈时候,会有个时间显示,这种时间显示和我上午给大家封装的不一样,上午的是那种显示具体时间。可是有时候我们产品需求是和微信一样显示
比如:这种需求
@"刚刚" \ @"10分钟前" \ @"5小时前" \ @"昨天 09:10:05" \ @"11-20 09:10:05" \ @"2016-8-10 04:10:05"
开始
第一步:
+ (instancetype)calendar;
第二步:
+ (instancetype)calendar
{
if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
return [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
} else {
return [NSCalendar currentCalendar];
}
}
第三步:
/**
* 是否为今年
*/
- (BOOL)isThisYear;
/**
* 是否为今天
*/
- (BOOL)isToday;
/**
* 是否为昨天
*/
- (BOOL)isYesterday;
/**
* 是否为明天
*/
- (BOOL)isTomorrow;
第四步:
- (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;
}