2011-04-21 6 views
8

necesito un método para dar formato a un (periodo en segundos) NSTimeInterval en una cadena para producir algo así como "Hace unos 10 minutos", "1 hora, 20 minutos", o "menos de 1 minuto ".inteligente Formateo de lapso de tiempo

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

La plataforma de destino es iOS. Código de muestra es bienvenido.

+0

verificación [esta respuesta] (http://stackoverflow.com/a/34359788/1106035) que tiene enlace muestra. –

Respuesta

30

Esta es una categoría para NSDate. No es exactamente el uso de un NSTimeInterval, bien internamente :) Supongo que estás trabajando con marcas de tiempo.

Archivo de cabecera NSDate + PrettyDate.h

@interface NSDate (PrettyDate) 

- (NSString *)prettyDate; 

@end 

Implementación 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

Creo que he visto ese código en alguna parte de un cliente de Twitter. No es exactamente lo que necesito, pero puedo trabajar con eso. Necesito más precisión para el momento, como 1 hora, 20 minutos. – Felix

+2

Lo he portado desde una lib de JavaScript para una aplicación de red social. Si necesita más precisión, puede agregar fácilmente más bloques de intervalos. Sólo quería decir una idea. –

+0

^¡Sí, reconozco eso de una lib de JS que uso en mi sitio de redes sociales! ¡Genial para verlo en Objective-C así! –

Cuestiones relacionadas