8
votes

Formatage intelligent de la durée

J'ai besoin d'une méthode pour formater un NSTIMEINTERVAL CODE> (heure de l'heure en secondes) dans une chaîne pour produire quelque chose comme "il y a environ 10 minutes" em>, "1h , 20min " em>, ou " moins de 1 minute " em>.

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


1 commentaires

Vérifiez Cette réponse qui a un lien d'échantillon.


3 Réponses :


30
votes

Ceci est une catégorie pour NSDate. Ce n'est pas exactement en utilisant un NStMeInterval, bien en interne :) Je suppose que vous travaillez avec des horodatages.

fichier d'en-tête Nsdate + prettydate.h strong> p>

@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;
}


3 commentaires

Je crois que j'ai vu ce code quelque part dans un client Twitter. Ce n'est pas exactement ce dont j'ai besoin, mais je peux travailler avec elle. J'ai besoin de plus de précision pour le temps, comme 1h, 20min.


J'ai porté ceci à partir d'une bibliothèque JavaScript pour une application de réseau social. Si vous avez besoin de plus de précision, vous pouvez facilement ajouter plus de blocs d'intervalle. Juste signifiait comme une idée.


^ Ouais, je reconnais que d'un JS Lib I utilise sur mon site de réseau social! Pretty Cool pour le voir dans l'objectif - C comme ça!



3
votes

Vous voudrez peut-être vous référer à Facebook Three -20 Cadre. Dans leurs nsdateadditions, ils ont fourni quelques jolis formats à la date. Cela pourrait être mieux que vous l'étendez.

Reportez-vous à la source à https: // github .com / Facebook / Trois20 / BLOB / MASTER / SRC / TROCS20CORE / SOURCES / NSDATEADDITIONS.M

- (nstring *) formatHorTrelativetime; vous donnera "<1m", "50m", "3h", "3D"


0 commentaires

1
votes

Voici celui-ci qui formate la date dans le style de Facebook:

https://github.com/nikilster/nsdate-time-ago < / p>


0 commentaires