comment puis-je améliorer cette « DateFromNextWeekDay: FromDate » code de la méthode?
-
27-10-2019 - |
Question
serait heureux d'entendre des suggestions re comment améliorer / écourter cette méthode. Bref besoin de:
- Trouvez la prochaine date pour laquelle il est jour de la semaine (par exemple mer) correspond à ce qui est passé dans la méthode.
- Par exemple, la prochaine WED à partir d'une date donnée (et y compris cette date donnée)
code ci-dessous:
- (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;
}
Merci
La solution
Vous pourriez juste trouver le jour de la semaine du passé à ce jour, soustrayez du jour cible de la semaine, et enfin ajouter ce résultat à la date transmise. Pas besoin de boucle à travers les dates. Il serait donc:
daysToAdd = (targetDayOfWeek - currentDayDayOfWeek)% 7
La raison de moding la soustraction est de traiter les cas où le jour de cible est plus petite que la journée en cours (il est un samedi et vous êtes à la recherche d'un mardi par exemple).
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow