封装时间判断

简介: 封装时间判断

封装时间判断


我们会在发朋友圈时候,会有个时间显示,这种时间显示和我上午给大家封装的不一样,上午的是那种显示具体时间。可是有时候我们产品需求是和微信一样显示

比如:这种需求

@"刚刚" \ @"10分钟前" \ @"5小时前" \ @"昨天 09:10:05" \ @"11-20 09:10:05" \ @"2016-8-10 04:10:05"

开始

784fe772aa8487f1c01f1e3b344397f4.png

Snip20160810_1.png

64e72299f19e777cd5cb3cd5a312d6f8.png

Snip20160810_2.png

第一步:

552b2fe0f3b77dd6a8ec752df6a3a519.png

Snip20160810_3.png

+ (instancetype)calendar;

第二步:

66b97208a0e272fd8b1bc7d11a4f6aae.png

Snip20160810_4.png

+ (instancetype)calendar
{
    if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
        return [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
    } else {
        return [NSCalendar currentCalendar];
    }
}

第三步:


59f07107a572fdc4cb03c1f5e6a7ce36.png

Snip20160810_5.png

2e498c10d5271a0839e9bd0b56759d28.png

Snip20160810_6.png

9e14fed6e25ac0caa1964c84e8622f9d.png

Snip20160810_7.png

/**
 *  是否为今年
 */
- (BOOL)isThisYear;
/**
 *  是否为今天
 */
- (BOOL)isToday;
/**
 *  是否为昨天
 */
- (BOOL)isYesterday;
/**
 *  是否为明天
 */
- (BOOL)isTomorrow;

第四步:


c72ca901b125b9927d71c67b45634358.png

Snip20160810_8.png


a0ab0d666f10c8c04f874d561b7954a2.png

Snip20160810_9.png


a9c4673f2a354e2b9a872544d83d15ef.png

Snip20160810_10.png

- (BOOL)isThisYear
{
    // 判断self这个日期是否为今年
    NSCalendar *calendar = [NSCalendar calendar];
    // 年
    NSInteger selfYear = [calendar component:NSCalendarUnitYear fromDate:self];
    NSInteger nowYear = [calendar component:NSCalendarUnitYear fromDate:[NSDate date]];
    return selfYear == nowYear;
}
//- (BOOL)isThisYear
//{
//    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
//    fmt.dateFormat = @"yyyy";
//    
//    // 年
//    NSString *selfYear = [fmt stringFromDate:self];
//    NSString *nowYear = [fmt stringFromDate:[NSDate date]];
//    
//    return [selfYear isEqualToString:nowYear];
//}
- (BOOL)isToday
{
    // 判断self这个日期是否为今天
    NSCalendar *calendar = [NSCalendar calendar];
    // 获得年月日元素
    NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
    NSDateComponents *selfCmps = [calendar components:unit fromDate:self];
    NSDateComponents *nowCmps = [calendar components:unit fromDate:[NSDate date]];
    return selfCmps.year == nowCmps.year
    && selfCmps.month == nowCmps.month
    && selfCmps.day == nowCmps.day;
}
//- (BOOL)isToday
//{
//    // 判断self这个日期是否为今天
//    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
//    fmt.dateFormat = @"yyyyMMdd";
//
//    NSString *selfString = [fmt stringFromDate:self];
//    NSString *nowString = [fmt stringFromDate:[NSDate date]];
//
//    return [selfString isEqualToString:nowString];
//}
- (BOOL)isYesterday
{
    // 判断self这个日期是否为昨天
    // self == 2015-10-31 23:07:08 -> 2015-10-31 00:00:00
    // now  == 2015-11-01 14:39:20 -> 2015-11-01 00:00:00
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"yyyyMMdd";
    NSString *selfString = [fmt stringFromDate:self]; // 20151031
    NSString *nowString = [fmt stringFromDate:[NSDate date]]; // 20151101
    NSDate *selfDate = [fmt dateFromString:selfString]; // 2015-10-31 00:00:00
    NSDate *nowDate = [fmt dateFromString:nowString]; // 2015-11-01 00:00:00
    NSCalendar *calendar = [NSCalendar calendar];
    NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
    NSDateComponents *cmps = [calendar components:unit fromDate:selfDate toDate:nowDate options:0];
    return cmps.year == 0
    && cmps.month == 0
    && cmps.day == 1;
}
- (BOOL)isTomorrow
{
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"yyyyMMdd";
    NSString *selfString = [fmt stringFromDate:self]; // 20151031
    NSString *nowString = [fmt stringFromDate:[NSDate date]]; // 20151101
    NSDate *selfDate = [fmt dateFromString:selfString]; // 2015-10-31 00:00:00
    NSDate *nowDate = [fmt dateFromString:nowString]; // 2015-11-01 00:00:00
    NSCalendar *calendar = [NSCalendar calendar];
    NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
    NSDateComponents *cmps = [calendar components:unit fromDate:selfDate toDate:nowDate options:0];
    return cmps.year == 0
    && cmps.month == 0
    && cmps.day == -1;
}


相关文章
|
存储 JSON 数据库
【C++ 软件设计思路】跨平台应用开发:如何选择合适的格式保存信息
【C++ 软件设计思路】跨平台应用开发:如何选择合适的格式保存信息
421 0
|
网络协议 算法 Java
|
4月前
|
消息中间件 缓存 JSON
1688拍立淘API实战指南:以图搜货解锁B2B采购新效率
1688拍立淘API(alibaba.ai.vision.product.search)通过“以图搜货”技术,助力企业快速匹配同款商品,解决B2B采购中“有图无货号、找货效率低”等痛点。支持图片上传、批量处理与全维度数据返回,结合合规性与高精度,重构供应链寻源模式,提升采购效率十倍以上。
|
5月前
|
存储 缓存 自然语言处理
64_模型部署:推理优化策略
随着人工智能技术的飞速发展,大型语言模型(LLM)在自然语言处理、多模态理解等领域展现出惊人的能力。然而,将这些模型从实验室环境部署到实际生产系统中,面临着诸多挑战。根据2025年最新研究数据,大模型部署的主要挑战包括:
|
人工智能 自然语言处理 API
自学记录HarmonyOS Next的HMS AI API 13:语音合成与语音识别
在完成图像处理项目后,我计划研究HarmonyOS Next API 13中的AI语音技术,包括HMS AI Text-to-Speech和Speech Recognizer。这些API提供了强大的语音合成与识别功能,支持多语言、自定义语速和音调。通过这些API,我将开发一个支持语音输入与输出的“语音助手”原型应用,实现从语音指令解析到语音响应的完整流程。此项目不仅提高了应用的交互性,也为开发者提供了广阔的创新空间。未来,语音技术将在无障碍应用和智慧城市等领域展现巨大潜力。如果你也对语音技术感兴趣,不妨一起探索这个充满无限可能的领域。 (238字符)
647 11
|
消息中间件 缓存 前端开发
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
3563 1
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
|
移动开发 JavaScript 小程序
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp微信小程序的校园跑腿的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的校园跑腿的详细设计和实现
439 0
|
数据采集 安全
医院信息化系统——手术麻醉信息系统(源码)
手术麻醉信息系统整合监护设备数据,实现手术全程电子化跟踪,包括手术申请、排班、麻醉计划等,确保患者数据自动采集与共享。系统围绕围术期临床业务,提供流程化、信息化管理,涉及术前评估、手术方案制定、风险评估到术后监护、麻醉总结和患者随访。通过与HIS、LIS、PACS系统的集成,优化手术流程,强化安全核查,促进麻醉质量和成本控制。
385 2
医院信息化系统——手术麻醉信息系统(源码)
|
计算机视觉 C++ Windows
VS2015搭建NCNN开发环境
VS2015搭建NCNN开发环境
323 0

热门文章

最新文章