根据Date获取x分钟前/x小时前/昨天/x天前/x个月前/x年前的iOS代码

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

  返回x分钟前/x小时前/昨天/x天前/x个月前/x年前
    - (Nsstring *)timeInfo {  
        return [NSDate timeInfoWithDate:self];  
    }  
      
    + (Nsstring *)timeInfoWithDate:(NSDate *)date {  
        return [self timeInfoWithDateString:[self stringWithDate:date format:[self ymdHmsFormat]]];  
    }  
      
    + (Nsstring *)timeInfoWithDateString:(Nsstring *)dateString {  
        NSDate *date = [self dateWithString:dateString format:[self ymdHmsFormat]];  
          
        NSDate *curDate = [NSDate date];  
        NSTimeInterval time = -[date timeIntervalSinceDate:curDate];  
          
        int month = (int)([curDate month] - [date month]);  
        int year = (int)([curDate year] - [date year]);  
        int day = (int)([curDate day] - [date day]);  
          
        NSTimeInterval retTime = 1.0;  
        if (time < 3600) { // 小于一小时  
            retTime = time / 60;  
            retTime = retTime <= 0.0 ? 1.0 : retTime;  
            return [Nsstring stringWithFormat:@"%.0f分钟前",retTime];  
        } else if (time < 33600 * 24) { // 小于一天,也就是今天  
            retTime = time / 3600;  
            retTime = retTime <= 0.0 ? 1.0 : retTime;  
            return [Nsstring stringWithFormat:@"%.0f小时前",retTime];  
        } else if (time < 33600 * 224 * 2) {  
            return @"昨天";  
        }  
        // 第一个条件是同年,且相隔时间在一个月内  
        // 第二个条件是隔年,对于隔年,只能是去年12月与今年1月这种情况  
        else if ((abs(year) == 0 && abs(month) <= 1)  
                 || (abs(year) == 1 && [curDate month] == 1 && [date month] == 12)) {  
            int retDay = 0;  
            if (year == 0) { // 同年  
                if (month == 0) { // 同月  
                    retDay = day;  
                }  
            }  
              
            if (retDay <= 0) {  
                // 获取发布日期中,该月有多少天  
                int totalDays = (int)[self daysInMonth:date month:[date month]];  
                  
                // 当前天数 + (发布日期月中的总天数-发布日期月中发布日,即等于距离今天的天数)  
                retDay = (int)[curDate day] + (totalDays - (int)[date day]);  
            }  
              
            return [Nsstring stringWithFormat:@"%d天前",(abs)(retDay)];  
        } else  {  
            if (abs(year) <= 1) {  
                if (year == 0) { // 同年  
                    return [Nsstring stringWithFormat:@"%d个月前",abs(month)];  
                }  
                  
                // 隔年  
                int month = (int)[curDate month];  
                int preMonth = (int)[date month];  
                if (month == 12 && preMonth == 12) {// 隔年,但同月,就作为满一年来计算  
                    return @"1年前";  
                }  
                return [Nsstring stringWithFormat:@"%d个月前",(abs)(12 - preMonth + month)];  
            }  
              
            return [Nsstring stringWithFormat:@"%d年前",abs(year)];  
        }  
          
        return @"1小时前";  
    }  

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...