ios calendar nscalendar

Obtenga la fecha de semanas en IOS SDK



calendar nscalendar (5)

Aquí hay un código de muestra que hace el truco.

-(NSArray*)daysThisWeek { return [self daysInWeek:0 fromDate:[NSDate date]]; } -(NSArray*)daysNextWeek { return [self daysInWeek:1 fromDate:[NSDate date]]; } -(NSArray*)daysInWeek:(int)weekOffset fromDate:(NSDate*)date { NSCalendar *calendar = [NSCalendar currentCalendar]; //ask for current week NSDateComponents *comps = [[NSDateComponents alloc] init]; comps=[calendar components:NSWeekCalendarUnit|NSYearCalendarUnit fromDate:date]; //create date on week start NSDate* weekstart=[calendar dateFromComponents:comps]; if (weekOffset>0) { NSDateComponents* moveWeeks=[[NSDateComponents alloc] init]; moveWeeks.week=1; weekstart=[calendar dateByAddingComponents:moveWeeks toDate:weekstart options:0]; } //add 7 days NSMutableArray* week=[NSMutableArray arrayWithCapacity:7]; for (int i=1; i<=7; i++) { NSDateComponents *compsToAdd = [[NSDateComponents alloc] init]; compsToAdd.day=i; NSDate *nextDate = [calendar dateByAddingComponents:compsToAdd toDate:weekstart options:0]; [week addObject:nextDate]; } return [NSArray arrayWithArray:week]; }

Quiero obtener las fechas actuales y las próximas de la semana con el nombre del día.

es decir, si la fecha de hoy es 28-06-2013 (viernes), entonces quiero obtener las fechas del 23-06-2013 (domingo) al 29-06-2013 (sábado) como la presente semana.

para la próxima semana quiero obtener fechas del 30-06-2013 (domingo) al 06-07-2013 (sábado).

¿Cómo puedo hacer esto?

Gracias,


Umm, no soy un experto en esto ni en nada, pero una manera tonta de hacer esto es primero reconocer el día de la semana de NSDate . Luego, podría agregar en las sentencias if instrucciones if podrían sumar y restar las fechas y nslog o printf cada una de ellas. O creo que hay una forma de acceder al calendario ios.

está bien, entonces lo dicho más arriba e hizo más de lo que dije. Sí, mira el enlace en la publicación que tengo delante.


Use NSDateComponents para averiguar el día de la semana y luego para encontrar la fecha requerida antes y después.


Use una instancia de NSCalendar para convertir su instancia NSDate de inicio en una instancia de NSDateComponents, agregue 1 día a los NSDateComponents y use NSCalendar para convertir eso a una instancia de NSDate. Repite los dos últimos pasos hasta que llegues a tu fecha de finalización.

NSDate *currentDate = [NSDate date]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setDay:1]; NSDate *nextDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];

O bien encuentre la fecha de inicio y la fecha de finalización. me gusta

NSDate *startDate = [NSDate date]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setDay:7]; NSDate *endDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];

luego, NSDate nextDate;

for ( nextDate = startDate ; [nextDate compare:endDate] < 0 ; nextDate = [nextDate addTimeInterval:24*60*60] ) { // use date }


Iba a copiar y pegar una respuesta, pero sugeriría ir y leer esta publicación: Fecha de inicio y finalización de la semana actual . Parece que lo ayudará a lograr lo que desea.

Algo como esto quizás:

NSDate *now = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSInteger weekNumber = [[calendar components: NSWeekCalendarUnit fromDate:now] week]; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *comp = [gregorian components:NSYearCalendarUnit fromDate:now]; [comp setWeek:weekNumber]; //Week number. int i; for (i = 1; i < 8; i=i+1){ [comp setWeekday:i]; //First day of the week. Change it to 7 to get the last date of the week NSDate *resultDate = [gregorian dateFromComponents:comp]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"EEEE MMMM d, yyyy"]; NSString *myDateString = [formatter stringFromDate:resultDate]; NSLog(@"%@",myDateString); }