Comience con el NSDate
desde el selector, y siga agregando 24 * 60 * 60 segundos hasta que sea un lunes. Agregue la fecha resultante al resultado. Continúe agregando 7 * 24 * 60 * 60 segundos a la última fecha que agregó y presione el resultado en la lista de resultados hasta que tenga todos los 64 lunes. Aquí es cómo saber si un NSDate
cae el lunes:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents =[gregorian components:NSWeekdayCalendarUnit fromDate:dateOfInterest];
NSInteger weekday = [weekdayComponents weekday];
if (weekday == 2) ... // 2 represents Monday
EDIT: DaveDeLong señaló una deficiencia en el algoritmo anterior: va a cambiar el tiempo de dos veces en los días de cambio al horario de verano. En lugar de contar segundos manualmente, utilizar este código para añadir un día a 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];
Para que conste, no estoy de acuerdo con las estrechas votos. –
sí ... esta es una pregunta bastante desafiante; Ayaz, cuando dices que quieres "buscar" los próximos 64 Lunes, ¿de qué forma quieres hacer la búsqueda? NSDates o EKEvents o? –
Quiero NSDates ... –