Obtener cada NSDate para este mes como NSString

En mi aplicación, necesito almacenar una URL para cada día del mes. Desde hoy y hacia atrás. ¿Como podría hacerlo?

Hasta el momento, no hay problema para get el NSDate de hoy como un NSString:

NSDate* date = [NSDate date]; NSDateFormatter* format = [[[NSDateFormatter alloc]init]autorelease]; [format setDateFormat:@"yyyyMdd"]; NSString* str = [format stringFromDate:date]; 

Entonces, ¿cómo hago para, por ejemplo, si quería la date en una cadena para, digamos, hace 17 días?

PD. Quiero usar estas dates y almacenarlas en una cadena para search urls para cada día durante el último mes, por ejemplo, www.myurl.com/pictureYEAR-MONTH-DAY.jpg

Esto es similar a la respuesta de Alex, pero parece que solo tiene días desde el comienzo del mes hasta el día que sea hoy. A continuación, le indicamos cómo puede get todos los días de este mes:

 NSDate *today = [NSDate date]; NSCalendar *cal = [NSCalendar currentCalendar]; NSMutableArray *datesThisMonth = [NSMutableArray array]; NSRange rangeOfDaysThisMonth = [cal rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:today]; NSDateComponents *components = [cal components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSEraCalendarUnit) fromDate:today]; [components setHour:0]; [components setMinute:0]; [components setSecond:0]; for (NSInteger i = rangeOfDaysThisMonth.location; i < NSMaxRange(rangeOfDaysThisMonth); ++i) { [components setDay:i]; NSDate *dayInMonth = [cal dateFromComponents:components]; [datesThisMonth addObject:dayInMonth]; } 

Esto saldrá con un NSArray de NSDates , con una date por día en el mes actual.


Si quieres una date que sea "hace 17 días", también puedes hacerlo fácilmente:

 NSCalendar *cal = [NSCalendar currentCalendar]; NSDate *today = [NSDate date]; NSDateComponents *diff = [[NSDateComponents alloc] init]; [diff setDay:-17]; NSDate *seventeenDaysAgo = [cal dateByAddingComponents:diff toDate:today]; 

Una vez que tenga un NSDate , es bastante simple convertirlo en una cadena:

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd"]; NSDate *date = ...; NSString *string = [formatter stringFromDate:date]; 

Simplemente obtenga los NSDateComponents de la date actual, luego extraiga el día de eso y escriba un bucle para restar de él hasta llegar a 1, cada vez que cree una nueva date de los componentes con el día cambiado, y guárdelo como una cadena .

El código probablemente pueda decir más que palabras, así que aquí tienes (probado):

 NSMutableArray *dates = [[NSMutableArray alloc] init]; NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; [fmt setDateFormat:@"yyyy-MM-dd"]; // you can set this to whatever you like NSDate *today = [NSDate date]; // get todays date NSCalendar *cal = [NSCalendar currentCalendar]; // needed to work with components NSDateComponents *components = [cal components:(NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit) fromDate:today]; NSUInteger day = [components day]; for (NSUInteger i=day; i>0; i--) { // loop through all days till down to 1 [components setDay:i]; // update the day in the components NSDate *date = [cal dateFromComponents:components]; [dates addObject:[fmt stringFromDate:date]]; // add the new date } for (NSString *date in dates) { NSString *str = [NSString stringWithFormat:@"www.myurl.com/picture/%@",date]; NSLog(@"%@",str); // voila, your URL. } [fmt release]; [dates release];