2012-11-09 13 views
7

Jestem nowy w Xcode i mam następujący problem:Jak poprawnie używać NSTimeInterval?

Chcę metodę, która daje mi czas, który upłynął od danej daty do teraz. Jeśli to było 2 lata temu, chcę zwrócić ciąg znaków "2 lata temu", ale jeśli było to 5 minut temu, chcę, aby zwrócił ciąg znaków "5 minut temu".

Sprawdziłem już NSTimeInterval i NSDateFormatter, ale nie mogłem znaleźć sposobu, aby to działało.

+1

kwestia ta została tu odpowiedziano Może sto razy. Co tak ciężko w Google'ach? – jimpic

+2

Być może będziesz musiał napisać to sam. Wiem, że to szokujące. – trojanfoe

Odpowiedz

14

Wystarczy Ci zacząć ...

by utworzyć datę referencyjną takiego:

NSCalendar *gregorian = [[NSCalendar alloc] 
          initWithCalendarIdentifier:NSGregorianCalendar]; 

NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
dateComponents.year = 2012; 
dateComponents.month = 1; 
dateComponents.day = 1; 
dateComponents.hour = 0; 
dateComponents.minute = 0; 
dateComponents.second = 0; 

NSDate *referenceDate = [gregorian dateFromComponents: dateComponents]; 

Aktualna data można uzyskać tak:

NSDate *now = [NSDate date]; 

przedział czas jest w sekundach, więc ...

NSTimeInterval interval = [now timeIntervalSinceDate:referenceDate]; 
NSLog (@"reference date was %.0f seconds ago", interval); 

Jestem pewna, że ​​będziesz w stanie to rozgryźć na tej stronie ...

This answer może ci pomóc.

2

Dziękuję, zastanawiałem się, czy jest łatwiejszy sposób robienia tego bez tak wielu linii kodu.

Można utworzyć datę referencyjną takiego:

NSDate *referenceDate = [NSDate date]; 
[[NSCalendar currentCalendar] rangeOfUnit:NSYearCalendarUnit 
           startDate:&referenceDate 
           interval:NULL 
            forDate:referenceDate]; 

lub spróbować to: https://github.com/billgarrison/SORelativeDateTransformer