iOS 依据Date获取x分钟前/x小时前/昨天/x天前/x个月前/x年前

Posted ljbguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 依据Date获取x分钟前/x小时前/昨天/x天前/x个月前/x年前相关的知识,希望对你有一定的参考价值。

  返回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 < 3600 * 24) { // 小于一天,也就是今天 retTime = time / 3600; retTime = retTime <= 0.0 ?

1.0 : retTime; return [NSString stringWithFormat:@"%.0f小时前", retTime]; } else if (time < 3600 * 24 * 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小时前"; }




以上是关于iOS 依据Date获取x分钟前/x小时前/昨天/x天前/x个月前/x年前的主要内容,如果未能解决你的问题,请参考以下文章

js怎样获取当前日期前10天的日期,或者是前n天的

iOS-OC根据时间戳获取距离现在的状态(刚刚,分钟前,今天,昨天)

js怎样获取当前日期前10天的日期?或者是前n天的?

PHP 时间戳转换成 已读文本:刚刚几小时前几分钟前昨天

PHP 时间戳转换成 已读文本:刚刚几小时前几分钟前昨天

php 小时前 分钟前