一行代码快速搞定发帖时间的显示状态

一行代码快速搞定发帖时间的显示状态

废话不多说,相信玩过微信,微博的人都见过这个功能.

效果图

1.日期是今天范围内的

  • 小于1分钟的

刚刚

  • 大于1分钟的

1分钟前

  • 大于等于1小时的

7小时前

  • 昨天的

昨天的

2.日期是"非今天的"范围内的

全称显示

业务逻辑

1.拿服务器获取的时间与当前的实时时间作比较

  • 首先判断是否是今年
  • 如果是今年,接下来判断是否是今天.
  • 如果是今天再做详细判断

2.伪代码:

if(今年){
	if(今天){
		if(大于等于1小时){
			显示状态: "几"小时前
		}else if(大于等于1分钟){
			显示状态: "几"分钟前
		}else{
			// 小于1分钟
			显示状态: 刚刚
		}
	}else if(昨天){
		显示状态: 昨天 HH:mm
	}else{
		// 昨天之前
		显示状态: MM-dd HH:mm:ss
	}
}else{
	// 非今年
	显示状态: yyyy-MM-dd HH:mm:ss
}

如何使用

使用方式非常简单

1.项目中导入 TYDate 工具类文件

2.导入头文件

#import "TYDate.h"

2.找到对应连线的显示时间的Label,通过单例调用下面方法即可

_timeLabel.text = [[TYDate shareInstance] timeStr:item.create_time];

3.方法实现

/**
 创建一个单例对象

 @return 单例对象
 */
+ (instancetype)shareInstance {
    
    static id instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });
    return instance;
}

/**
 服务器时间距当前时间差的直观显示

 @param serverTime 服务器获取的时间
 @return 一种直观的时间显示方式
 */
- (NSString *)timeStr:(NSString *)serverTime {
    NSString *str = nil;
    NSDate *createDate = [self serverCreateDate:serverTime];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSDateComponents *deltaTime = [self deltaWithNow:serverTime];
    if([self isThisYear:serverTime]) {   // 今年
        if([self isThisToday:serverTime]){   // 今天
            if(deltaTime.hour >= 1) {   // 时间差大于等于1小时
                str = [NSString stringWithFormat:@"%ld小时前",deltaTime.hour];
            }else if (deltaTime.minute >= 1){   // 时间差大于等于1分钟
                str = [NSString stringWithFormat:@"%ld分钟前",deltaTime.minute];
            }else {
                // 小于1分钟
                str = @"刚刚";
            }
        }else if([self isThisYesterday:serverTime]){
            dateFormatter.dateFormat = @"昨天 HH:mm";
            str = [dateFormatter stringFromDate:createDate];
        }else {
            // 昨天之前
            dateFormatter.dateFormat = @"MM-dd HH:mm:ss";
            str = [dateFormatter stringFromDate:createDate];
        }
    }else { // 非今年
        str = serverTime;
    }
    return str;    
}

其它功能实现

  • 根据服务器获取的时间判断是否是今年

    - (BOOL)isThisYear:(NSString *)serverTime;
    
  • 根据服务器获取的时间判断是否是今天

    - (BOOL)isThisToday:(NSString *)serverTime;
    
  • 根据服务器获取的时间判断是否是昨天

    - (BOOL)isThisYesterday:(NSString *)serverTime;
    
  • 服务器获取时间与当前的时间差

    - (NSDateComponents *)deltaWithNow:(NSString *)serverTime;
    

源码地址

点击下载源代码

posted @ 2017-01-05 21:11  Oo11  阅读(679)  评论(1编辑  收藏  举报