2011-03-20 56 views
1

很高興聽到有關如何改進/縮短此方法的建議。總之需要:如何改進此「DateFromNextWeekDay:FromDate」方法代碼?

  • 找到下一個星期幾(例如星期三)匹配傳入方法的日期。
  • 例如接下來的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; 
} 

感謝

回答

3

你可以隨便找星期的一天傳入日期,從一週中的目標日中減去該日期,最後將該結果添加到傳入的日期中。無需遍歷日期。因此,這將是:

daysToAdd =(targetDayOfWeek - currentDayDayOfWeek)%7

原因模變減法是處理情況的目標日比當天更小(這是一個星期六和你例如正在尋找一個星期二)。

+0

巴,打我吧! – Anomie 2011-03-21 00:52:48

+0

哦哇 - 我沒有意識到你可以添加/減去這樣的日期! – Greg 2011-03-21 00:55:40

+0

哈哈我討厭什麼時候發生在我身上:) – drewag 2011-03-21 00:56:25