智能格式化时间跨度

Fel*_*lix 8 iphone formatting time objective-c

我需要一种方法来将NSTimeInterval(以秒为单位的时间跨度)格式化为字符串,以产生类似"大约10分钟前","1小时,20分钟""小于1分钟"的内容.

-(NSString*) formattedTimeSpan:(NSTimeInterval)interval;
Run Code Online (Sandbox Code Playgroud)

目标平台是iOS.欢迎使用示例代码.

Nic*_*ver 30

这是NSDate的一个类别.它并没有完全使用NSTimeInterval,内部很好:)我假设你正在使用时间戳.

头文件NSDate + PrettyDate.h

@interface NSDate (PrettyDate)

- (NSString *)prettyDate;

@end
Run Code Online (Sandbox Code Playgroud)

实施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;
}
Run Code Online (Sandbox Code Playgroud)

  • 我已经从一个社交网络应用程序的javascript lib移植了它.如果需要更高的精度,可以轻松添加更多间隔块.只是作为一个想法. (2认同)