- (NSString *)minutesAgo {

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

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

NSDate *createdDate = [fmt dateFromString:self];

// 判断发送时间 和 现在时间 的差距

if (createdDate.isToday) { // 今天

if (createdDate.deltaWithNow.hour >= 1) {

fmt.dateFormat = @"HH:mm";

return [fmt stringFromDate:createdDate];

} else if (createdDate.deltaWithNow.minute >= 1) {

return [NSString stringWithFormat:@"%ld分钟前", (long)createdDate.deltaWithNow.minute];

} else {

return @"刚刚";

}

} else if (createdDate.isYesterday) { // 昨天

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

return [fmt stringFromDate:createdDate];

} else if (createdDate.isThisYear) { // 今年(至少是前天)

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

return [fmt stringFromDate:createdDate];

} else {// 非今年

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

return [fmt stringFromDate:createdDate];

}

}

#pragma mark Comparing Dates

- (BOOL) isEqualToDateIgnoringTime: (NSDate *) aDate

{

NSDateComponents *components1 = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];

NSDateComponents *components2 = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:aDate];

return ((components1.year == components2.year) &&

(components1.month == components2.month) &&

(components1.day == components2.day));

}

- (BOOL) isToday

{

return [self isEqualToDateIgnoringTime:[NSDate date]];

}

- (BOOL) isYesterday

{

return [self isEqualToDateIgnoringTime:[NSDate dateYesterday]];

}

/**

*  获得与当前时间的差距

*/

- (NSDateComponents *)deltaWithNow {

NSCalendar *calendar = [NSCalendar currentCalendar];

int unit = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;

return [calendar components:unit fromDate:self toDate:[NSDate date] options:0];

}

/**

*  是否为今年

*/

- (BOOL)isThisYear {

NSCalendar *calendar = [NSCalendar currentCalendar];

int unit = NSCalendarUnitYear;

// 获得当前时间的年月日

NSDateComponents *nowCmps = [calendar components:unit fromDate:[NSDate date]];

// 获得self的年月日

NSDateComponents *selfCmps = [calendar components:unit fromDate:self];

return nowCmps.year == selfCmps.year;

}

NSDate 刚刚、几分钟、几小时的更多相关文章

  1. Python处理刚刚,分钟,小时,天前等时间

    简介 用爬虫获取目标网站数据后可能会遇见时间为处理刚刚,分钟,小时,天前等时间格式,如图 解决问题: 写了一个工具类来处理该问题,其中封装了两个函数 1. 将时间中的中文数字转换成阿拉伯数字 def ...

  2. IOS NSDate NSDateFormatter 导致相差8小时

    时间问题应该是所有编程语言都要处理的.详细学过php的同学知道,php中也会有相差8小时的问题,然而php可以非常方便的解决的,直接设置下就好了 我最近在学习IOS的过程中,发现IOS的日期处理也是个 ...

  3. java 时间戳 、时间差计算(秒、分钟、小时、天数、月份、年)

    以下代码就是时间差计算(秒.分钟.小时.天数.月份.年) package me.zhengjie; import java.text.ParseException; import java.text. ...

  4. 利用正则表达式判断Java中的秒钟、分钟、小时、日、月是否符合规则

    // 定义校验规则 Pattern patRule = Pattern.compile("判断规则"); // 校验结果 patRule.matcher("判断的对象&q ...

  5. cron 任务的典型格式是: 分钟(0-59) 小时(0-24) 日(1-31) 月(1-12) 星期(0-6) 要执行的命令

    https://linux.cn/article-9687-1.html Cron 是您可以在任何类 Unix 操作系统中找到的最有用的实用程序之一.它用于安排命令在特定时间执行.这些预定的命令或任务 ...

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

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

  7. php根据时间显示刚刚,几分钟前,几小时前的实现代码

    发布时间距现在的时间 function tranTime($time) { $rtime = date("m-d H:i", $time); $htime = date(" ...

  8. js jq插件 显示中文时间戳 刚刚 N分钟前 N小时前 今天 上午 下午 日期格式化

    注:页面需提前引用JQ ; $.fn.extend({ /* ** notes: 获取13位时间戳的简单操作 ** new Date('2018-02-01 15:10:00').getTime() ...

  9. iOS 准确计算某个时间点距现在的时间差的代码 如"几分钟,几小时,几秒之前" ,

    利用时间戳来进行计算  ,需要给它一个时间: NSString *countTime = [self intervalSinceNow:@"2015-10-29 17:00:00" ...

随机推荐

  1. ASP.NET 生命周期 简介

    当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面,  完全识别 HTTP 页面处理程序类后,ASP.NET 运行时 ...

  2. GPUImage实现摄像头暂停

    GPUImage相信很多开发者都用过,其本身也是十分简单易用,因此对于GPUImage的基本用法不再赘述. 最近在使用GPUImage时要实现摄像时暂停和继续的功能,但GPUImage本身并没有提供相 ...

  3. dialogfield

    before ax2012: typeof() or extendedtype ax2012: extendedtypestr()

  4. 一些不错的学习资料(node)

    Node.js的api中文文档 http://expressjs.jser.us/ 关于Node.js的一系列不错的学习文章 http://blog.fens.me/ express框架的使用 htt ...

  5. OAuth认证

    OAuth简介 OAuth是在不提供用户名和密码的情况之下,授权第三方应用访问Web资源的安全协议. OAuth允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定 ...

  6. JAVASCRIPT 中 FOR (VAR I IN DATA) 循环数组项

    今天在改代码的时候发现有很多代码的循环是用 for(var i in data)写的,我通常都是用for(var i=0;i<data.length;i++) 就查看了一下,原来这两个是有区别的 ...

  7. 重置zend studio 默认设置的方法

    转载自:http://www.zendstudio.net/archives/reset-the-zend-studio-settings/ 这个方法类似于手机的"恢复出厂设置"的 ...

  8. GET与POST的区别

    转自http://blog.csdn.net/darxin/article/details/4944225#comments HTTP请求的GET与POST方式的本质区别可以参考hyddd在<浅 ...

  9. iOS内存管理

    iOS内存管理的方式是引用计数机制.分为MRC(人式引用计数)和ARC(自动引用计数). 为什么要学习内存管理? 内存管理方式是引用计数机制,通过控制对象的引用计数来实现操作对象的功能.一个对象的生命 ...

  10. 接口与继承ppt作业

    问:为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来? 答:子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化.不 ...