2017-07-28 25 views
0

我正在嘗試創建日曆應用來顯示事件。檢查NSDate是否發生在特定模式

其中一些事件是經常性事件(每日,每週)。

比方說,有兩個事件eventA(每週),這是在一月創建10 2012年

因此當用戶打開當月日曆,我需要找出這些事件是否eventB(每日)今天將根據其反覆出現的模式顯示。

現在我在做下列方式:

獲取活動的開始日期

NSDate * startDate 

產生偏移尾

NSDate *offSetEndDate = [startDate dateByAddingYears:10]; 

我想顯示這些事件utpo從他們的開始日期起10年

現在將事件發生日期添加到陣列:

//Daily 
     if (recurring==1) { 
      NSDate *nextOccurenceDate = [startDate dateByAddingDays:1]; 
      BOOL eventCrossedOffSetDate = NO; 
      while (eventCrossedOffSetDate == NO) { 
       [dateArr addObject:[nextOccurenceDate shortDateString]]; 
       nextOccurenceDate = [nextOccurenceDate dateByAddingDays:1]; 
       if (![self isDateValid:nextOccurenceDate andEndDate:offsetEndDate]) { 
        eventCrossedOffSetDate = YES; 
       } 
      } 
     } 

這生成日期的陣列用於從其開始日期到當前日期的事件。

我使用這個數組來檢查當前日期/用戶選擇日是否存在顯示/隱藏事件。

此方法只比較兩個日期。

-(BOOL)isDateValid:(NSDate*)startDate andEndDate:(NSDate*)endDate{ 

    if ([startDate compare:endDate] == NSOrderedDescending) { 
     //"startDate is later than endDate 
     return NO; 
    } else if ([startDate compare:endDate] == NSOrderedAscending) { 
     //startDate is earlier than endDate 
     return YES; 
    } else { 
     //dates are the same 
     return YES; 

    } 

    return NO; 
} 

這當然做的工作,但對於更多的事件,這需要太多的時間來執行計算和返回數組。

有什麼我可以做的改善呢?

+0

我的客戶需要的應用程序。平日裏你的意思是什麼? –

回答

2

每週一次的事件只是檢查的someDate平日匹配的事件:

let eventWeekDay = Calendar.current.component(.weekday, from: event.startDate) 
let todayWeekDay = Calendar.current.component(.weekday, from: Date()) 

if todayWeekDay == eventWeekDay 
{ 
    // Today has the weekly event. 
} 
+0

你可以解釋一下2012年1月13日這個星期五的例子,它會在2012年1月13日的每個星期五發生。我怎麼知道它是否發生在7月28日,因爲今天是星期五? –

+0

@TejaNandamuri我今天改寫了我的例子。你是這個意思嗎? –