一种:时间逻辑:

- (NSString *)created_at{

//    从后台返回的字符串格式:Mon Aug 03 09:17:31 +0800 2014,

//NSDateFormatter可以把NSDate转成字符串,也可以把字符串转成NSDate

//初始化一个时间格式化器

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

//指定时间格式化字符串-->是一个什么样的格式

formatter.dateFormat = @"EEE MMM dd HH:mm:ss z yyyy";

//    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

//如果是真机,一定要指定个这locale,标明这个时间是什么样标识

formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

//当前w创建的时间

NSDate *createDate = [formatter dateFromString:_created_at];

//    //取出当前时间

NSDate *currentDate = [NSDate date];

//拿着当前时间与create_at进行一个对比

//    if (是今年) {

if ([self isThisYearWithDate:createDate]) {

//是同一年

//判断是否是今天

if ([self isTodayWithDate:createDate]) {

//是今天

//如果创建时间加上60秒,大于当前时间,代表1分钟之内

NSDate *resultDate = [createDate dateByAddingTimeInterval:60];

if ([resultDate compare:currentDate] == NSOrderedDescending) {

//代表是1分钟之内

return @"刚刚";

}else{

//判断1小时之内

resultDate = [createDate dateByAddingTimeInterval:3600];

if ([resultDate compare:currentDate] == NSOrderedDescending) {

//代表1小时之内

//计算多少分钟前

NSTimeInterval interval = [currentDate timeIntervalSinceDate:createDate];

//分钟数

NSInteger intervalMinute = interval/60;

return [NSString stringWithFormat:@"%zd分钟前",intervalMinute];

}else{

//几小时前

NSTimeInterval interval = [currentDate timeIntervalSinceDate:createDate];

//分钟数

NSInteger intervalMinute = interval/3600;

return [NSString stringWithFormat:@"%zd小时前",intervalMinute];

}

}

//是不是1分钟之内

//是不是1小时之内

}else{

//如果是昨天-->昨天 11:11

if ([self isYesterdayWithDate:createDate]) {

//不是今天先这么去显示:08-01 15-03

formatter.dateFormat = @"昨天 HH:mm";

return [formatter stringFromDate:createDate];

}else{

//不是今天先这么去显示:08-01 15-03

formatter.dateFormat = @"MM-dd HH:mm";

return [formatter stringFromDate:createDate];

}

}

}else{

//不是今年:2014-05-05 09:17:31

formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

return [formatter stringFromDate:createDate];

}

}

/**

*  是否是与当前时间是同一年

*

*  @param date 传入对比的时间

*

*  @return <#return value description#>

*/

- (BOOL)isThisYearWithDate:(NSDate *)date{

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

formatter.dateFormat = @"yyyy";

//当前w创建的时间

NSDate *createDate = date;

//取出当前时间

NSDate *currentDate = [NSDate date];

//拿着创建时间与当前时间进行对比-->只格式化年份

formatter.dateFormat = @"yyyy";

//取出年份-->判断是否同一年,只要拿着年份进行对比一下,看一下是否一样

NSString *createDateYearStr = [formatter stringFromDate:createDate];

NSString *currentDateYearStr = [formatter stringFromDate:currentDate];

//对比年份的时间字符串,如果不是同一年的话返回NO

return [createDateYearStr isEqualToString:currentDateYearStr];

}

/**

*  判断与今天否是同一天,是否是今天

*

*  @param date

*

*  @return

*/

- (BOOL)isTodayWithDate:(NSDate *)date{

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

//拿着创建时间与当前时间进行对比-->只格式化年份-月份-天

formatter.dateFormat = @"yyyy-MM-dd";

//当前wei创建的时间

NSDate *createDate = date;

//取出当前时间

NSDate *currentDate = [NSDate date];

//取出年份-->判断是否是今天,

NSString *createDateYearStr = [formatter stringFromDate:createDate];

NSString *currentDateYearStr = [formatter stringFromDate:currentDate];

//对比年份的时间字符串,如果不是同一年的话返回NO

return [createDateYearStr isEqualToString:currentDateYearStr];

}

/**

*  与当前时间对比,判断是否是昨天

*

*  @param date <#date description#>

*

*  @return <#return value description#>

*/

- (BOOL)isYesterdayWithDate:(NSDate *)date{

//2014-09-30 10:00:00 创建时间

//2014-10-01 09:00:00 当前

NSDate *currentDate = [NSDate date];

//取出当前日历对象

NSCalendar *canlendar = [NSCalendar currentCalendar];

//NSCalendarUnit 对比单位-->要对比些什么东西

//设置对比对象

NSCalendarUnit unit = NSCalendarUnitYear|NSCalendarUnitDay|NSCalendarUnitMonth|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;

//时间比较的结果

NSDateComponents *components = [canlendar components:unit fromDate:date toDate:currentDate options:NSCalendarWrapComponents];

//对比两个时间的day差值是否为

//    NSLog(@"day=%zd,hour=%zd,minute=%zd,second=%zd",components.day,components.hour,components.minute,components.second);

return components.day == 1;

}

二种方式:

//重写time的getter 方法

// 1 判断addtime和当前的时间差

//如果时间差小于60分钟    返回 n分钟前

//如果超过60分钟 小于24小时   返回n小时前

//如果超过24小时     返回  月-日

- (NSString *)time{

//把json中的数字时间 转换成日期对象

NSDate *date = [NSDate dateWithTimeIntervalSince1970:[self.addtime intValue]];

//计算date和当前的时间差

NSCalendar *calendar = [NSCalendar currentCalendar];

//获取两个时间相差的分钟

NSDateComponents *component = [calendar components:NSCalendarUnitMinute fromDate:date toDate:[NSDate date] options:0];

if (component.minute < 60) {

return [NSString stringWithFormat:@"%zd分钟前",component.minute];

}

//判断相差的小时

component = [calendar components:NSCalendarUnitHour fromDate:date toDate:[NSDate date] options:0];

if (component.hour < 24) {

return [NSString stringWithFormat:@"%zd小时前",component.hour];

}

//

NSDateFormatter *ndf = [NSDateFormatter new];

ndf.dateFormat = @"MM-dd";

return [ndf stringFromDate:date];

}

supersr--时间显示逻辑-->NSDate+NSCalendar的更多相关文章

  1. OC - 时间日期类NSDate

    OC - 时间日期类NSDate //NSDate 时间日期类 NSDate 二进制数据流 { //1.获取当前时间 零时区的时间 //显示的是格林尼治的时间: 年-月-日 时:分:秒:+时区 NSD ...

  2. Foundation框架—时间处理对象NSDate

    NSDate类用于保存时间值,同时提供了一些方法来处理一些基于秒级别时差(Time Interval)运算和日期之间的早晚比较等. 1. NSDate的构造方法和构造获取实例的属性 用于创建NSDat ...

  3. js获取当前时间显示在页面上

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. jsp界面动态时间显示

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  5. PHP比较全的友好的时间显示,比如‘刚刚’,'几秒前'等

    分享一个php友好的比较完成的时间格式化函数,包括‘刚刚’,'几秒之前',‘几分钟前’,'几小时前',几天前,几周前,几个月前等.调用方式很简单,是从ThinkSNS 里面拿出来的. /** * 友好 ...

  6. 将时间显示为“刚刚”“n分钟/小时前”等

    在很多场合为了显示出信息的及时性,一般会将时间显示成“刚刚”,“5分钟前”,“3小时前”等,而不是直接将时间打印出来.比如微博,SNS类应用就最长用到这个功能.而一般存储在数据库中的时间格式为 Uni ...

  7. phpcms v9 搜索结果列表页时间显示1970问题解决方案

    对于喜欢用phpcms v9 的小伙伴来说,在调用时间时,总会出现时间1970这样的问题,对于这个问题,网上的说法很多,内容页时间显示通常不会问题,搜索结果页就不行了,通过总结,发现使用{format ...

  8. 电脑时间显示秒 win10电脑显示农历

    win10电脑时间显示秒 显示农历. Win10怎样让任务栏时间显示秒_百度经验 win10电脑显示农历 网上搜到的不管用. 直接下载win10万年历.我下载的人生日历. 最烦广告, 还有一些流氓行为 ...

  9. GUI带有右键菜单,带有时间显示的

    %带有右键菜单的GUI figure('Menubar','none'); h = uicontextmenu; uimenu(h,'Label','A'); uimenu(h,'Label','B' ...

随机推荐

  1. C++模板学习

    一.定义函数模板 template<class T> 函数定义 举个例子比较两个数大小: template<class T> int Compare(T a,T b) { ; ...

  2. javascript高级程序设计---Event对象

    事件是一种异步编程的实现方式,本质上是程序各个组成部分之间传递的特定消息. DOM的事件操作(监听和触发),都定义在EventTarget接口 该接口就是三个方法,addEventListener和r ...

  3. 读w3c中文教程对键盘事件解释的感想 -遁地龙卷风

    写这篇博文源于w3c中文教程对键盘事件的解释, onkeydown 某个键盘按键被按下 onkeypress 某个键盘按键被按下并松开 onkeyup 某个键盘按键被松开 可在实践中发现 只注册key ...

  4. Java Io 流(输入输出流)

    IO流,也就是输入和输出流,可分为字节流和字符流. 1. 字节流 (1). InputStream 输入流,用于读取文件 输入流常用API: inputStream.read()  读取一个字节 in ...

  5. 【转载】javaAgent 参数

    -javaagent 这个JVM参数是JDK 5引进的. java -help的帮助里面写道: -javaagent:<jarpath>[=<options>] load Ja ...

  6. cocos2dx中CC_CALLBACK_1等宏中this指针实际指向

    首先看代码,我在Helloworld中添加两个函数. void HelloWorld::addTarget(){ Size visibleSize = Director::getInstance()- ...

  7. Gunicorn 文档翻译

    服务器模式 Gunicorn 基于 pre-fork 模式,这意味着有一个主进程管理工作的子进程.主进程对客户端的工作业务有了解.所有的请求和响应都是工作子进程处理. 主进程 主进程是一个简单的循环, ...

  8. C# 游戏服务器框架

    http://www.supersocket.net/ http://blog.csdn.net/zhuweisky/article/details/9055989 http://blog.csdn. ...

  9. nginx 免安装包

    在一个环境下编译安装好nginx,然后可以拷贝到其他环境使用.同时避免直接安装造成的环境冲突. 首先下载好nginx和相关插件.然后编译安装到沙盒里面.demo如下: cd到nginx目录 ./con ...

  10. 转:JQuery读写Cookie

    Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术.当你浏览某网站时,你硬盘上会生产一个非常小的文本文件,它可以记录你的用户ID.密码.浏览过 ...