第一次写博客,把自己做的一些笔记分享给大家,有简单的有复杂的,不喜请喷。
相信大家经常遇到列表时间上显示刚刚、几分钟前、几小时前、几天前、正常日期这样的展示方式。一般这种数据如果不是实时刷新都会由后台算好给返回,但是大多数这样显示的都是前台实时刷新哒,所以我们就写一个小小的算法咯,上代码步入正题。相信一切尽在不言中各为看官均能理解。
.h文件定义一个类方法
@interface CBGetTimeState : NSObject
+(NSString*)needChangeStringToTime:(NSString*)timeStr;
@end
.m文件实现代码
#import "CBGetTimeState.h"
@implementation CBGetTimeState
/**
获取当前时间和发布时间之间的差值时间显示不同的状态规则如下取差值tempTime(单位s):
tempTime<3*60 小于3分钟 刚刚
60*60>tempTime>=3*60 大于3分钟小于1小时 *分钟前
60*60*24>tempTime>=60*60 大于1小时小于24小时 *小时前
60*60*24*3>tempTime>=60*60*24 大于24小时小于72小时/大于1天小于3天 *天前
tempTime>60*60*24*3 2018-01-05 大于72小时/大于3天 年-月-日
@param timeStr 传递的时间参数
@return 返回最终的现实值
*/
+(NSString*)needChangeStringToTime:(NSString*)timeStr
{
if (timeStr!=nil) {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; /* ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制 */
// NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Beijing"];
// [formatter setTimeZone:timeZone];
/* 设置时区,这个对于时间的处理有时很重要 */
NSDate *dateModel = [formatter dateFromString:timeStr]; /* 按照格式设置传入的date时间 */
NSDate *dateNow = [formatter dateFromString:[self getNowTime]];/* 按照格式设置本地时间 */
NSString *timeModel = [NSString stringWithFormat:@"%ld", (long)[dateModel timeIntervalSince1970]];/* 计算传入时间的时间戳 */
NSString *timeNow = [NSString stringWithFormat:@"%ld", (long)[dateNow timeIntervalSince1970]];/* 计算当前时间的时间戳 */
NSInteger time = ([timeNow integerValue] - [timeModel integerValue]);/* 计算时差 */
NSString*resultStr=[[NSString alloc] init];
if (time<3*60) {
resultStr=@"刚刚";
}
else if (time>=3*60&&time<60*60)
{
resultStr=[NSString stringWithFormat:@"%ld分钟前",time/60];
}
else if (time>=60*60&&time<60*60*24)
{
resultStr=[NSString stringWithFormat:@"%ld小时前",time/(60*60)];
}
else if (time>=60*60*24&&time<60*60*24*3)
{
resultStr=[NSString stringWithFormat:@"%ld天前",time/(60*60*24)];
}
else
{
resultStr=[self timeState:timeStr];
}
return resultStr;
}
return nil;
}
/* 获取本地时间 */
+ (NSString *)getNowTime {
NSDate *senddate=[NSDate date];
NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSString *locationString=[dateformatter stringFromDate:senddate];
return locationString;
}
//2015-11-03T09:52:59Z
+(NSString*)timeState:(NSString*)time
{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSDate *mydate=[formatter dateFromString:time];
[formatter setDateFormat:@"YYYY"];
NSInteger currentYear=[[formatter stringFromDate:mydate] integerValue];
[formatter setDateFormat:@"MM"];
NSInteger currentMonth=[[formatter stringFromDate:mydate]integerValue];
[formatter setDateFormat:@"dd"];
NSInteger currentDay=[[formatter stringFromDate:mydate] integerValue];
return [NSString stringWithFormat:@"%ld-%02ld-%02ld",(long)currentYear,(long)currentMonth,(long)currentDay];
}
@end