时间跨度的智能格式化

| 我需要一种将
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;
}
    
您可能要参考Facebook three20框架。在他们的NSDateAdditions中,他们提供了一些漂亮的日期格式。它可能比扩展它更好。 请参阅https://github.com/facebook/three20/blob/master/src/Three20Core/Sources/NSDateAdditions.m上的源
- (NSString*)formatShortRelativeTime;
会给您\“ <1m \”,\“ 50m \”,\“ 3h \”,\“ 3d \”     
这是一种以Facebook风格格式化日期的格式: https://github.com/nikilster/NSDate-Time-Ago     

要回复问题请先登录注册