Начните с NSDate
из сборщика и продолжайте прибавлять к нему 24 * 60 * 60 секунд до понедельника. Добавьте полученную дату к результату. Продолжайте добавлять 7 * 24 * 60 * 60 секунд к последней добавленной вами дате и помещать результат в список возврата, пока у вас не будет всех 64 понедельников. Вот как вы скажете, если в понедельник выпадет NSDate
:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents =[gregorian components:NSWeekdayCalendarUnit fromDate:dateOfInterest];
NSInteger weekday = [weekdayComponents weekday];
if (weekday == 2) ... // 2 represents Monday
РЕДАКТИРОВАТЬ: DaveDeLong указал на недостаток вышеуказанного алгоритма: он будет сдвигать время два раза в дни перехода на летнее время. Вместо подсчета секунд вручную используйте этот код, чтобы добавить день к NSDate
:
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:1]; // Add 1 when searching for the next Monday; add 7 when iterating 63 times
NSDate *date = [gregorian dateByAddingComponents:comps toDate:currentDate options:0];
[comps release];