我需要一种方法将NSTimeInterval
(以秒为单位的时间跨度)格式化为字符串,以生成类似“大约10分钟前”的内容,“1h,20min” ,或“不到1分钟”。
-(NSString*) formattedTimeSpan:(NSTimeInterval)interval;
目标平台是iOS。欢迎使用示例代码。
答案 0 :(得分: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;
}
答案 1 :(得分:3)
您可能想参考Facebook three20框架。在他们的NSDateAdditions中,他们为日期提供了一些漂亮的格式。它可能比你扩展它更好。
请参阅https://github.com/facebook/three20/blob/master/src/Three20Core/Sources/NSDateAdditions.m
上的来源 - (NSString*)formatShortRelativeTime;
会给你“&lt; 1m”,“50m”,“3h”,“3d”
答案 2 :(得分:1)
以下是以Facebook风格格式化日期: