¿Cómo puedo mejorar este código de método "DateFromNextWeekday: FrontDate"?
-
27-10-2019 - |
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
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