我需要一種方法來一個NSTimeInterval
(以秒爲時間跨度)格式化爲一個字符串以產生類似「約10分鐘前」,「1H,20分鐘」,或「少比1分鐘「。智能格式化
-(NSString*) formattedTimeSpan:(NSTimeInterval)interval;
目標平臺是iOS。示例代碼是受歡迎的。
我需要一種方法來一個NSTimeInterval
(以秒爲時間跨度)格式化爲一個字符串以產生類似「約10分鐘前」,「1H,20分鐘」,或「少比1分鐘「。智能格式化
-(NSString*) formattedTimeSpan:(NSTimeInterval)interval;
目標平臺是iOS。示例代碼是受歡迎的。
這是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;
}
我相信我在Twitter客戶端的某個地方看到過這樣的代碼。這不完全是我需要的,但我可以使用它。我需要更精確的時間,比如1小時20分鐘。 – Felix 2011-04-21 09:52:16
我已經從一個社交網絡應用程序的JavaScript庫移植了這個。如果您需要更高的精度,您可以輕鬆添加更多的間隔塊。只是意味着一個想法。 – 2011-04-21 10:01:09
^是的,我認識到從我的社交網站使用的JS庫!很酷,看到它在Objective-C中的佈局就像這樣! – 2013-06-19 03:06:15
您可能要參閱Facebook three20框架。在他們的NSDateAdditions中,他們爲日期提供了一些漂亮的格式。這可能比你延伸它更好。
在https://github.com/facebook/three20/blob/master/src/Three20Core/Sources/NSDateAdditions.m
- (NSString*)formatShortRelativeTime;
參考源會給你 「< 1M」, 「50m」 表示, 「3H」, 「3D」
這裏是一個格式化的日期在Facebook的風格:
檢查[此答案](http://stackoverflow.com/a/34359788/1106035),其具有樣品鏈路。 – 2015-12-18 16:25:29