zoukankan      html  css  js  c++  java
  • 一行代码快速搞定发帖时间的显示状态

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

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

    效果图

    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;
      

    源码地址

    点击下载源代码

  • 相关阅读:
    Python基础编程常用模块汇总
    博客目录
    网络编程
    python 对象
    python模块和规范开发
    python常用内置函数
    python递归函数和匿名函数
    python装饰器
    python迭代器,生成器,推导式
    python作用域
  • 原文地址:https://www.cnblogs.com/mtystar/p/6253919.html
Copyright © 2011-2022 走看看