iOS 根据Date获取x分钟前/x小时前/昨天/x天前/x个月前/x年前
2015-07-02 16:17
323 查看
返回x分钟前/x小时前/昨天/x天前/x个月前/x年前
- (NSString *)timeInfo {
return [NSDate timeInfoWithDate:self];
}
+ (NSString *)timeInfoWithDate:(NSDate *)date {
return [self timeInfoWithDateString:[self stringWithDate:date format:[self ymdHmsFormat]]];
}
+ (NSString *)timeInfoWithDateString:(NSString *)dateString {
NSDate *date = [self dateWithString:dateString format:[self ymdHmsFormat]];
NSDate *curDate = [NSDate date];
NSTimeInterval time = -[date timeIntervalSinceDate:curDate];
int month = (int)([curDate month] - [date month]);
int year = (int)([curDate year] - [date year]);
int day = (int)([curDate day] - [date day]);
NSTimeInterval retTime = 1.0;
if (time < 3600) { // 小于一小时
retTime = time / 60;
retTime = retTime <= 0.0 ? 1.0 : retTime;
return [NSString stringWithFormat:@"%.0f分钟前", retTime];
} else if (time < 3600 * 24) { // 小于一天,也就是今天
retTime = time / 3600;
retTime = retTime <= 0.0 ? 1.0 : retTime;
return [NSString stringWithFormat:@"%.0f小时前", retTime];
} else if (time < 3600 * 24 * 2) {
return @"昨天";
}
// 第一个条件是同年,且相隔时间在一个月内
// 第二个条件是隔年,对于隔年,只能是去年12月与今年1月这种情况
else if ((abs(year) == 0 && abs(month) <= 1)
|| (abs(year) == 1 && [curDate month] == 1 && [date month] == 12)) {
int retDay = 0;
if (year == 0) { // 同年
if (month == 0) { // 同月
retDay = day;
}
}
if (retDay <= 0) {
// 获取发布日期中,该月有多少天
int totalDays = (int)[self daysInMonth:date month:[date month]];
// 当前天数 + (发布日期月中的总天数-发布日期月中发布日,即等于距离今天的天数)
retDay = (int)[curDate day] + (totalDays - (int)[date day]);
}
return [NSString stringWithFormat:@"%d天前", (abs)(retDay)];
} else {
if (abs(year) <= 1) {
if (year == 0) { // 同年
return [NSString stringWithFormat:@"%d个月前", abs(month)];
}
// 隔年
int month = (int)[curDate month];
int preMonth = (int)[date month];
if (month == 12 && preMonth == 12) {// 隔年,但同月,就作为满一年来计算
return @"1年前";
}
return [NSString stringWithFormat:@"%d个月前", (abs)(12 - preMonth + month)];
}
return [NSString stringWithFormat:@"%d年前", abs(year)];
}
return @"1小时前";
}
- (NSString *)timeInfo {
return [NSDate timeInfoWithDate:self];
}
+ (NSString *)timeInfoWithDate:(NSDate *)date {
return [self timeInfoWithDateString:[self stringWithDate:date format:[self ymdHmsFormat]]];
}
+ (NSString *)timeInfoWithDateString:(NSString *)dateString {
NSDate *date = [self dateWithString:dateString format:[self ymdHmsFormat]];
NSDate *curDate = [NSDate date];
NSTimeInterval time = -[date timeIntervalSinceDate:curDate];
int month = (int)([curDate month] - [date month]);
int year = (int)([curDate year] - [date year]);
int day = (int)([curDate day] - [date day]);
NSTimeInterval retTime = 1.0;
if (time < 3600) { // 小于一小时
retTime = time / 60;
retTime = retTime <= 0.0 ? 1.0 : retTime;
return [NSString stringWithFormat:@"%.0f分钟前", retTime];
} else if (time < 3600 * 24) { // 小于一天,也就是今天
retTime = time / 3600;
retTime = retTime <= 0.0 ? 1.0 : retTime;
return [NSString stringWithFormat:@"%.0f小时前", retTime];
} else if (time < 3600 * 24 * 2) {
return @"昨天";
}
// 第一个条件是同年,且相隔时间在一个月内
// 第二个条件是隔年,对于隔年,只能是去年12月与今年1月这种情况
else if ((abs(year) == 0 && abs(month) <= 1)
|| (abs(year) == 1 && [curDate month] == 1 && [date month] == 12)) {
int retDay = 0;
if (year == 0) { // 同年
if (month == 0) { // 同月
retDay = day;
}
}
if (retDay <= 0) {
// 获取发布日期中,该月有多少天
int totalDays = (int)[self daysInMonth:date month:[date month]];
// 当前天数 + (发布日期月中的总天数-发布日期月中发布日,即等于距离今天的天数)
retDay = (int)[curDate day] + (totalDays - (int)[date day]);
}
return [NSString stringWithFormat:@"%d天前", (abs)(retDay)];
} else {
if (abs(year) <= 1) {
if (year == 0) { // 同年
return [NSString stringWithFormat:@"%d个月前", abs(month)];
}
// 隔年
int month = (int)[curDate month];
int preMonth = (int)[date month];
if (month == 12 && preMonth == 12) {// 隔年,但同月,就作为满一年来计算
return @"1年前";
}
return [NSString stringWithFormat:@"%d个月前", (abs)(12 - preMonth + month)];
}
return [NSString stringWithFormat:@"%d年前", abs(year)];
}
return @"1小时前";
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- iOS开发之路--微博OAuth授权_取得用户授权的accessToken
- ios通过按钮点击异步加载图片
- ios中图像进行压缩方法汇总
- IOS检测指定路径的文件是否存在
- iOS、Mac OS X系统中编程实现汉字转拼音的方法(超级简单)