2013-05-29 2 views
0

Я пытаюсь получить разницу между двумя датами, и она должна отображаться в днях.Разница между датами с NSDateComponents дает неправильный вывод

NSLog(@"%@", [NSDate date]); 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"dd/mm/yyyy"]; 

NSDate *formattedDate = [formatter dateFromString: [NSString stringWithFormat:@"31/05/2013"]]; 


NSDate *startDateForDays = [NSDate date]; 
NSDate *endDateForDays = formattedDate; 

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

NSUInteger unitFlagsForDays = NSDayCalendarUnit; 

NSDateComponents *componentsForDays = [gregorian components:unitFlagsForDays 
                fromDate:startDateForDays 
                toDate:endDateForDays options:0]; 

NSLog(@"%@", [NSString stringWithFormat:@"%i days until %@", [componentsForDays day], formattedDate]); 

Результат выглядит следующим образом:

2013-05-29 20:21:51 +0000 
118 days until 2013-01-30 23:05:00 +0000 

Я понятия не имею, что в моем коде является неправильным, и я надеюсь, что вы могли бы мне помочь.

+0

Возможно, что-то связано с форматированием минут вместо месяцев. –

+0

Вау, большое спасибо :) – joelfischerr

+0

Ошибка была, как указал Горячий Ликс в моей третьей строке кода. «dd/mm/yyyy» будет дней/минут/лет, что я хотел, это дни/месяцы/годы. – joelfischerr

ответ

1

Я понимаю, что вы решили свою проблему, просто указав, что вы можете немного упростить, оставив беззнаковый целочисленный бит.

NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit 
               fromDate:startDate 
                toDate:endDate 
               options:0]; 

Это должен быть комментарий не ответ, но я не могу комментировать, хотя я должен быть в состоянии.

1

Попробуйте ------------>

NSTimeInterval дифф = [secondDate timeIntervalSinceDate: STARTDATE];