2013-08-06 11 views
5

Próbuję zrobić etykietę, która mówi, ile dni pozostało do zdarzenia. Chcę obliczyć różnicę między dzisiejszą datą a datą zdarzenia. Używam tego kodu i daje mi on -4600. Działa dobrze, dopóki nie skorzystam z dzisiejszej daty.Jak uzyskać liczbę dni między dwoma datami celu-c

NSDateFormatter *f = [[NSDateFormatter alloc] init]; 
    [f setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *startDate = [NSDate date]; 
    NSDate *endDate = [f dateFromString:end]; 
    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit 
                 fromDate:startDate 
                  toDate:endDate 
                 options:0]; 
    return components.day; 
return components.day; 
+0

Jedno pytanie, w którym mówisz, to duplikat, w którym użyłem tej odpowiedzi i nie działa. – user1898829

+0

Czy zweryfikowałeś, że 'NSDate * endDate = [f dateFromString: end]' zwraca oczekiwaną datę? - Co zawiera ciąg 'end'? –

+1

@ user1898829 Powinieneś był o tym wspomnieć w swoim pytaniu – borrrden

Odpowiedz

17

Przez domyślny [NSDate date] daty powrotu w jak 2013-08-06 08:50:25 +0000 i trzeba ustawić formatowania do yyyy-MM-dd to, więc trzeba konwertować startDate do yyyy-MM-dd tej formy ..

Spróbuj

NSDateFormatter *f = [[NSDateFormatter alloc] init]; 
    [f setDateFormat:@"yyyy-MM-ddHH:mm:ss ZZZ"]; 
    NSDate *startDate = [NSDate date]; 
    NSLog(@"%@",startDate); 
    NSDate *endDate = [f dateFromString:end]; 
    NSLog(@"%@",endDate); 


    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit 
                 fromDate:startDate 
                  toDate:endDate 
                 options:0]; 
    return components.day; 
Powiązane problemy