2014-06-07 1 views
2

Я хочу показать «Сегодня» или «Завтра» на ярлыке, если настало время или сегодня, и показать его в «dd-mm-yyy», формат для остальных.Компоненты дня: разница между днями между двумя датами, неправильными для сегодняшнего дня и завтра

Все работает почти идеально, кроме того, что (учитывая, что сегодня 7 июня):

  • Если установить срок платежа на сегодня (7 июня) или завтра (8 июня), этикетка обновлен с текстом «Сегодня».
  • Если я установил дату платежа послезавтра (9 июня), он отобразит «Завтра».

Это мой код:

- (void)configureDueLabelForCell:(UITableViewCell *)cell withChecklistItem:(ChecklistItem *)item 
{ 
    UILabel *label = (UILabel *)[cell viewWithTag:1002]; 

    if (item.shouldRemind) { 
     int difference = [self dateDiffrenceToDate:item.dueDate]; 
     if (difference == 0) { 
      label.text = @"Today"; 
     } else if (difference == 1) { 
      label.text = @"Tomorrow"; 
     } else { 
      NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
      // [formatter setDateStyle:NSDateFormatterMediumStyle]; 
      [formatter setDateFormat:@"dd-MM-yyyy"]; 
      label.text = [formatter stringFromDate:item.dueDate]; 
     } 

    } else { 
     label.text = @""; 
    } 
} 

-(int)dateDiffrenceToDate:(NSDate *)dueDate 
{ 
    // Manage Date Formation same for both dates 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"dd-MM-yyyy"]; 
    NSDate *startDate = [NSDate date]; 
    NSDate *endDate = dueDate; 


    unsigned flags = NSDayCalendarUnit; 
    NSDateComponents *difference = [[NSCalendar currentCalendar] components:flags fromDate:startDate toDate:endDate options:0]; 

    int dayDiff = [difference day]; 

    return dayDiff; 
} 

Я также попытался:

// NSDate *startDate = [NSDate date]; 
// NSDate *endDate = dueDate; 
//  
// NSTimeInterval secondsBetween = [endDate timeIntervalSinceDate:startDate]; 
//  
// int numberOfDays = secondsBetween/86400; 
// NSLog(@"numberofdays: %d", numberOfDays); 
// 
// return numberOfDays; 

ответ

3

От https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html#//apple_ref/doc/uid/TP40007836-SW1

»... этот метод обрезает результаты расчета для самых маленьких Например, если параметр fromDate: соответствует 14 января 2010 года в 11:30 вечера, а параметр toDate: соответствует 15 января 2010 года в 8 : 00 AM, между двумя датами всего 8,5 часов. Если вы запрашиваете количество дней, вы получаете 0, потому что 8.5 часов меньше 1 дня. Могут быть ситуации, когда это должно быть 1 день. Вы должны решить, какое поведение ожидают ваши пользователи в конкретном случае. Если вам нужно получить расчет, который возвращает количество дней, рассчитанное по числу полуночи между двумя датами, вы можете использовать категорию для NSCalendar, аналогичную той, что приведена в листинге 13. «

+0

Ohh .. Теперь это имеет смысл .. Спасибо .. есть ли способ, который я могу сравнить только с датой, а не временем? – ZyreX

+0

Или рассчитать часы до полуночи, а также часы до установленной даты. Если часы до полуночи меньше, – Fred

+0

Спасибо .. Я попробую – ZyreX