Pregunta

Estaría feliz de escuchar las sugerencias sobre cómo mejorar / acortar este método. En resumen, necesidad de:

  • Encuentre la siguiente fecha para la cual es día de semana (por ejemplo, WEL), coincide con lo que se pasa al método.
  • Por ejemplo, el próximo miércoles de una fecha determinada (e incluyendo esa fecha dada)

Código a continuación:

- (NSDate*)DateFromNextWeekDay:(NSInteger)weekDay FromDate:(NSDate*)fromDate {
    // Returns the next week day, as specified by "weekDay", from the specified "fromDate" 
    NSDate *fromDateMidday = [[NSDate date] dateBySettingHour:12 andMinute:0];
    NSDate *dateCounter  = [[fromDateMidday copy] dateByAddingTimeInterval:-86400];     // Take 1 day away, which will get incremented in the loop
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSInteger day;
    do{
        dateCounter  = [dateCounter dateByAddingTimeInterval:86400];
        unsigned units = NSWeekdayCalendarUnit;
        NSDateComponents *components = [gregorian components:units fromDate:dateCounter];
        day = [components weekday];
    } while(day != weekDay);
    [gregorian release];
    return dateCounter;
}

Gracias

¿Fue útil?

Solución

Podría encontrar el día de la semana de la fecha aprobada, reste eso del día objetivo de la semana y finalmente sumar ese resultado a la fecha pasada. No es necesario recorrer las fechas. Entonces sería:

DayStoadd = (Targetdayofweek - Actualdaydayofweek) % 7

La razón para modificar la resta es manejar los casos en que el día objetivo es más pequeño que el día actual (es un sábado y está buscando un martes, por ejemplo).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top