检查 NSDate 是否以特定模式出现

check if NSDate occur at particular patterns

我正在尝试创建一个日历应用程序来显示事件。

其中一些事件是重复发生的事件(每天、每周)。

假设在 2012 年 1 月 10 日创建了两个事件 eventA(每周)和 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;
                }
            }
        }

这将为事件生成从开始日期到当前日期的日期数组。

并且我使用此数组检查当前 day/user 所选日期是否存在于 show/hide 事件。

这个方法只是比较两个日期。

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

这当然可以完成工作,但对于更多事件,这会花费太多时间来执行计算和 return 数组。

我可以做些什么来改善这个吗?

对于每周事件,只需检查 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.
}