2013-02-22 2 views
1

У меня есть настраиваемая настройка календаря с использованием UICollectionView, и у меня есть массив, который содержит даты до 30 дней. То, что я пытаюсь сделать, это выяснить, находится ли значение между текущей датой и за 7 дней до нее. Если это мне нужно, чтобы что-то сделать. Я не могу понять, что я делаю неправильно. Вот то, что я до сих пор:проверка, если дата находится между диапазоном

NSDateFormatter *df = [NSDateFormatter new]; 
    [df setDateFormat:@"MM-dd-yy"]; 
    NSdate *date = [NSDate date]; 
    NSDate *newCurrentDate = [date dateByAddingTimeInterval:+14*24*60*60]; 
    NSDate *sevenDaysBeforeCurrent = [date dateByAddingTimeInterval:-7*24*60*60]; 




    if([[df stringFromDate:[days objectAtIndex:indexPath.item]] compare:[df stringFromDate:newCurrentDate]] == NSOrderedAscending && [[df stringFromDate:[days objectAtIndex:indexPath.item]] compare:[df stringFromDate:sevenDaysBeforeCurrent]] == NSOrderedDescending) 
    { 

      UIImage *buttonImage = [UIImage imageNamed:@"dates.png"]; 
      [myButton setBackgroundImage:buttonImage forState:UIControlStateNormal]; 

    } 

Что она делает это изменить образ каждого дня перед newCurrentDate вместо того, чтобы просто предыдущий 7. Может ли кто-нибудь увидеть, что я делаю неправильно?

Heres инициализация массива:

myDays = [[NSMutableArray alloc] init]; 
    NSCalendar *cal = [NSCalendar autoupdatingCurrentCalendar]; 
    NSDate *today = [NSDate date]; 
    date = [NSDate date]; 




    for (int i = 0; i < 31; i++) 
    { 
     NSDateComponents *comps = [[NSDateComponents alloc]init]; 
     [comps setDay:i]; 
     [myDays addObject:[cal dateByAddingComponents:comps toDate:today options:0]]; 
    } 
+1

Почему вы создаете строки? Почему бы вам просто не сравнить даты сами? – 2013-02-22 21:54:02

+0

У меня это было изначально [[days objectAtindex: indexPath.item] compare: date], но это дало бы предупреждение, и когда я запустил приложение, он сработает. – bardockyo

+0

, тогда у вас нет 'NSDate' в массиве. – 2013-02-22 22:01:44

ответ

1

попробовать что-то вдоль этих линий:

NSDate *currentDate = [NSDate date]; 
NSDate *dateSevenDaysPrior = [currentDate dateByAddingTimeInterval:-(7 * 24 * 60 * 60)]; 
NSDate *someDate = [currentDate dateByAddingTimeInterval:-(3 * 24 * 60 * 60)]; // adjust as you like 

if (([dateSevenDaysPrior compare:someDate] != NSOrderedDescending) && 
    ([someDate compare:currentDate] != NSOrderedDescending)) 
{ 
    NSLog(@"date is in range"); 
} 
else 
{ 
    NSLog(@"date is not in range"); 
} 

Это предполагает, что вы предоставляете (что someDate стоит в настоящем примере) на самом деле является примером NSDate.

5

Вам не нужно использовать dateFormatter.

if([dateInQuestion compare:newCurrentDate] == NSOrderedAscending && [dateInQuestion compare:sevenDaysBeforeCurrent] == NSOrderedDescending){ 
    // do something 
} 
Смежные вопросы