你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 根據Date獲取x分鐘前/x小時前/昨天/x天前/x個月前/x年前

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

編輯: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 < 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小時前;
}

 
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved