1

この方法を改善/短縮する方法についての提案を聞いてうれしいです。要するに:

  • 曜日(水など)がメソッドに渡されたものと一致する次の日付を検索します。
  • たとえば、特定の日付からの次のWED(およびその特定の日付を含む)

以下のコード:

- (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;
}

ありがとう

4

1 に答える 1

3

渡された日付の曜日を見つけて、それを目標の曜日から減算し、最後にその結果を渡された日付に追加するだけです。日付をループする必要はありません。したがって、次のようになります。

daysToAdd =(targetDayOfWeek-currentDayDayOfWeek)%7

減算を変更する理由は、ターゲット日が現在の日よりも小さい場合(たとえば、土曜日で火曜日を探している場合)を処理するためです。

于 2011-03-21T00:51:39.283 に答える