开发社交或者资讯类APP时需要把获取的时间日期改为可读性好的“几小时前”、“几分钟前”
下面我提供方法,可以备下以后套用
首先在工程中添加NSDate的类目”NSDate+GDGCategory“
NSDate+GDGCategory.h
#import <Foundation/Foundation.h>
@interface NSDate (GDGCategory)
/**
*比较from和self的时间差值
*/
-(NSDateComponents*)deltaFrom:(NSDate*)from;
/**
*是否为今年
*/
-(BOOL)isThisYear;
/**
*是否为今天
*/
-(BOOL)isToday;
/**
*是否为昨天
*/
-(BOOL)isYesterday;
@end
NSDate+GDGCategory.m
#import "NSDate+GDGCategory.h"
@implementation NSDate (GDGCategory)
-(NSDateComponents*)deltaFrom:(NSDate*)from
{
NSCalendar * calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = NSCalendarUnitDay |NSCalendarUnitMonth |NSCalendarUnitYear |NSCalendarUnitHour |NSCalendarUnitMinute |NSCalendarUnitSecond;
return [calendar components:unit fromDate:from 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
{
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
{
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 * calender = [NSCalendar currentCalendar];
NSDateComponents * cmps = [calender components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:selfDate toDate:nowDate options:0];
return cmps.year == 0 && cmps.month == 0 && cmps.day == 1;
}
@end
备注很清楚,应该可以看懂,代码可以用在很多地方
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
/**你所获取数据的发布时间 */
@property (nonatomic, copy) NSString *create_time;
-(NSString *)create_time;
@end
ViewController.m
#import "ViewController.h"
#import "NSDate+GDGCategory.h"
@interface ViewController ()
@end
@implementation ViewController
-(NSString *)create_time
{
NSDateFormatter * fmt = [[NSDateFormatter alloc]init];
fmt.dateFormat = @"yyyy-MM-dd HH-mm-ss";
NSDate * create = [fmt dateFromString:_create_time];
/**
显示效果
今年
今天
1分钟内
刚刚
1小时内
xx分钟前
其他
xx小时前
昨天
昨天 18:56:34
其他
06-23 19:56:23
非今年
2016-05-08 18:45:30
*/
if (create.isThisYear) {
if (create.isToday) {
NSDateComponents *cmps = [[NSDate date] deltaFrom:create];
if (cmps.hour >= 1) {
return [NSString stringWithFormat:@"%zd小时前", cmps.hour];
} else if (cmps.minute >= 1) {
return [NSString stringWithFormat:@"%zd分钟前", cmps.minute];
} else {
return @"刚刚";
}
} else if (create.isYesterday) {
fmt.dateFormat = @"昨天 HH:mm:ss";
return [fmt stringFromDate:create];
} else {
fmt.dateFormat = @"MM-dd HH:mm:ss";
return [fmt stringFromDate:create];
}
} else {
return _create_time;
}
}