2011-04-21 25 views
8

ben ""1h, 20dk", daha az veya "Yaklaşık 10 dakika önce" gibi bir şey üretmek için bir dizeye bir NSTimeInterval (saniye cinsinden zaman dilimini) biçimlendirmek için bir yöntem gerekir 1 dakikadan ".Akıllı Biçimlendirme

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

Hedef platform iOS'tur. Örnek kod kabul edilir.

+0

onay [Bu cevap] (http://stackoverflow.com/a/34359788/1106035). –

cevap

30

Bu, NSDate için bir kategoridir. Tam olarak NSTimeInterval kullanmıyor, iyi dahili olarak :) Zaman damgası ile çalıştığınızı varsayalım.

Başlık dosyası NSDate + PrettyDate.h

@interface NSDate (PrettyDate) 

- (NSString *)prettyDate; 

@end 

Uygulama 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

Bu kodu bir twitter istemcisinde bir yerlerde gördüğüme inanıyorum. Tam olarak ihtiyacım olan şey değil, ama onunla çalışabilirim. 1 saat 20 dakika gibi daha fazla hassaslığa ihtiyacım var. – Felix

+2

Bunu bir sosyal ağ uygulaması için javascript lib dosyasından yükledim. Daha fazla hassasiyete ihtiyacınız varsa, kolayca daha fazla aralık blokları ekleyebilirsiniz. Sadece bir fikir demek. –

+0

^Evet, sosyal paylaşım sitemde kullandığım bir JS kitaplığından biliyorum! Objective-C'de böyle göründüğünü görmek çok güzel! –