Voici les méthodes de Cacao pour vous aider à obtenir de l'information pertinente (pas sûr si elles sont toutes disponibles dans le coca-touch).
NSDate * today = [NSDate date];
NSLog(@"today: %@", today);
NSString * str = @"Thu, 21 May 09 19:10:09 -0700";
NSDate * past = [NSDate dateWithNaturalLanguageString:str
locale:[[NSUserDefaults
standardUserDefaults] dictionaryRepresentation]];
NSLog(@"str: %@", str);
NSLog(@"past: %@", past);
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |
NSDayCalendarUnit |
NSHourCalendarUnit | NSMinuteCalendarUnit |
NSSecondCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags
fromDate:past
toDate:today
options:0];
NSLog(@"months: %d", [components month]);
NSLog(@"days: %d", [components day]);
NSLog(@"hours: %d", [components hour]);
NSLog(@"seconds: %d", [components second]);
Le NSDateComponents objet semble tenir la différence dans les unités concernées (comme indiqué).
Si vous spécifiez toutes les unités que vous pouvez ensuite utiliser cette méthode:
void dump(NSDateComponents * t)
{
if ([t year]) NSLog(@"%d years ago", [t year]);
else if ([t month]) NSLog(@"%d months ago", [t month]);
else if ([t day]) NSLog(@"%d days ago", [t day]);
else if ([t minute]) NSLog(@"%d minutes ago", [t minute]);
else if ([t second]) NSLog(@"%d seconds ago", [t second]);
}
Si vous voulez calculer vous-même, vous pouvez jeter un oeil à:
NSDate timeIntervalSinceDate
Et puis utiliser des secondes dans l'algorithme.
Avertissement: Si cette interface devient obsolète (je n'ai pas vérifié), Apple préféré façon de le faire via NSDateFormatters
, comme suggéré dans les commentaires ci-dessous, l'air assez soigné en tant que bien que je vais garder ma réponse, pour des raisons historiques, il peut encore être utile pour certains à regarder la logique utilisée.