根據Date獲取x分鐘前/x小時前/昨天/x天前/x個月前/x年前的iOS代碼

jopen 9年前發布 | 1K 次閱讀 Objective-C IOS

  返回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小時前";  
}  </pre> 


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!