iOS - неправильное количество дней для разницы NSDate/NSCalendar

Я пытаюсь получить разницу в днях между сегодняшним днем ​​[NSDate date] и днем, выбранным пользователем из UIDatePicker, d, который будет возвращен как целое число. .

Вот что я использую, чтобы понять разницу:

NSDate *startDate = d;
NSDate *endDate =  [NSDate date];
NSLog(@"startDate: %@",startDate);
NSLog(@"endDate: %@",endDate);

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
NSDateComponents *components = [gregorian components:NSDayCalendarUnit
                                            fromDate:endDate
                                              toDate:startDate
                                             options:0];
NSInteger days = [components day];

NSLog(@"Days: %i",days);

И startDate, и endDate возвращаются правильно, но проблема, которую я получаю, заключается в том, что разница в днях, которую я получаю, неверна. Например, когда я выбираю сегодняшнюю дату, разница равна 0, когда я выбираю завтра, разница по-прежнему равна 0, а когда я выбираю следующий день, разница составляет всего 1, а должна быть 2.

Есть ли у кого-нибудь идеи о том, что я могу сделать, чтобы исправить это? Это сводит меня с ума, и я не знаю, что с этим делать.


person mhbdr    schedule 19.07.2012    source источник


Ответы (2)


  • Например, когда я выбираю сегодняшнюю дату, разница равна 0, когда я выбираю завтра, разница по-прежнему равна 0, а когда я выбираю следующий день, разница составляет всего 1, а должна быть 2.

предположим, что выбранная дата завтрашнего дня — 17:00, а текущая сегодняшняя дата — 20:00. Затем, если попытаться получить разницу между датами на основе количества дней, она должна быть равна нулю. Потому что разница между указанными выше датами на 2 часа меньше одного полного дня. Я надеюсь, что это решит вашу проблему. Всегда устанавливайте компонент обеих дат, которые вы сравниваете, с одинаковыми. Используйте NSDateComponent для этой цели.

person vikas    schedule 19.07.2012

Обычно с этим типом проблемы это связано с разными форматами даты, которые вызывают именно эту проблему.

Проверьте этот вопрос в качестве ссылки: найдите общее количество дней между два свидания в айфоне

OR

Задача C - вычисление количества дней между двумя датами < /а>

person SimplyKiwi    schedule 19.07.2012