检查 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.
}
我正在尝试创建一个日历应用程序来显示事件。
其中一些事件是重复发生的事件(每天、每周)。
假设在 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.
}