2011-04-21 78 views
8

我需要一種方法來一個NSTimeInterval(以秒爲時間跨度)格式化爲一個字符串以產生類似「約10分鐘前」「1H,20分鐘」,或「少比1分鐘「智能格式化

-(NSString*) formattedTimeSpan:(NSTimeInterval)interval; 

目標平臺是iOS。示例代碼是受歡迎的。

+0

檢查[此答案](http://stackoverflow.com/a/34359788/1106035),其具有樣品鏈路。 – 2015-12-18 16:25:29

回答

30

這是NSDate的一個類別。它並不完全使用NSTimeInterval,內部是:)我假設你正在使用時間戳。

頭文件的NSDate + PrettyDate.h

@interface NSDate (PrettyDate) 

- (NSString *)prettyDate; 

@end 

實現的NSDate + PrettyDate.m

@implementation NSDate (PrettyDate) 

- (NSString *)prettyDate 
{ 
    NSString * prettyTimestamp; 

    float delta = [self timeIntervalSinceNow] * -1; 

    if (delta < 60) { 
     prettyTimestamp = @"just now"; 
    } else if (delta < 120) { 
     prettyTimestamp = @"one minute ago"; 
    } else if (delta < 3600) { 
     prettyTimestamp = [NSString stringWithFormat:@"%d minutes ago", (int) floor(delta/60.0) ]; 
    } else if (delta < 7200) { 
     prettyTimestamp = @"one hour ago";  
    } else if (delta < 86400) { 
     prettyTimestamp = [NSString stringWithFormat:@"%d hours ago", (int) floor(delta/3600.0) ]; 
    } else if (delta < (86400 * 2)) { 
     prettyTimestamp = @"one day ago";  
    } else if (delta < (86400 * 7)) { 
     prettyTimestamp = [NSString stringWithFormat:@"%d days ago", (int) floor(delta/86400.0) ]; 
    } else { 
     NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
     [formatter setDateStyle:NSDateFormatterMediumStyle]; 

     prettyTimestamp = [NSString stringWithFormat:@"on %@", [formatter stringFromDate:self]]; 
     [formatter release]; 
    } 

    return prettyTimestamp; 
} 
+0

我相信我在Twitter客戶端的某個地方看到過這樣的代碼。這不完全是我需要的,但我可以使用它。我需要更精確的時間,比如1小時20分鐘。 – Felix 2011-04-21 09:52:16

+2

我已經從一個社交網絡應用程序的JavaScript庫移植了這個。如果您需要更高的精度,您可以輕鬆添加更多的間隔塊。只是意味着一個想法。 – 2011-04-21 10:01:09

+0

^是的,我認識到從我的社交網站使用的JS庫!很酷,看到它在Objective-C中的佈局就像這樣! – 2013-06-19 03:06:15