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

來源:互聯網
上載者:User

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.