Вот методы из Какао, которые помогут вам получить соответствующую информацию (не уверен, что все они доступны в 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]);
Кажется, что объект NSDateComponents содержит разницу в соответствующих единицах (как указано).
Если вы укажете все единицы измерения, то сможете использовать этот метод:
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]);
}
Если вы хотите рассчитать себя, вы можете взглянуть на:
NSDate timeIntervalSinceDate
А затем использовать секунды в алгоритме.
Отказ от ответственности : если этот интерфейс устарел (я не проверял), предпочтительный способ Apple сделать это с помощью NSDateFormatters
, как предлагается в комментариях ниже, также выглядит довольно аккуратно - я Я сохраню свой ответ по историческим причинам, для некоторых все же будет полезно взглянуть на использованную логику.