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

Était-ce utile?

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
scroll top