2017-07-28 26 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我今天改写了我的例子。你是这个意思吗? –