我得到了一组在 UITableView 中显示的事件。每个事件都有一个开始日期和结束日期,它们之间有 1-3 天。
我正在尝试检测特定日期范围是否包括月初(例如:8 月 1 日),并向该表格视图单元格添加特殊标记。
我读过 NSDate 和日历操作是昂贵的操作,我的表格视图已经不是世界上最快的。如何有效地确定日期范围是否包括月初?
我得到了一组在 UITableView 中显示的事件。每个事件都有一个开始日期和结束日期,它们之间有 1-3 天。
我正在尝试检测特定日期范围是否包括月初(例如:8 月 1 日),并向该表格视图单元格添加特殊标记。
我读过 NSDate 和日历操作是昂贵的操作,我的表格视图已经不是世界上最快的。如何有效地确定日期范围是否包括月初?
检查两个结束日期的月份值,如果它们不同,则您有月份的开始,否则您没有。
编辑:首先检查任何端点(开始或结束)日期值等于 1。
好吧,务实地考虑一下,您可以检查每个日期的月份:
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* startComp = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:startDate];
NSDateComponents* endComp = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:endDate];
if([startComp month] != [endComp month]){
// start of month included
}
你可以对这些天做同样的事情,如果endDate
天的价值小于startDate
天的价值,那么你知道你在某个地方有一个第一。显然,这种方式只有在事件持续不到一个月的情况下才能正常工作(你说他们这样做了)。
您可以检查结束日期是否低于开始日期。
例如:开始 = 6 月 30 日,结束 = 7 月 2 日。
NSDate * start, end;
NSInteger startDay = [[start descriptionWithCalendarFormat:@"%d" timeZone:nil locale:nil] intValue];
NSInteger endDay = [[start descriptionWithCalendarFormat:@"%d" timeZone:nil locale:nil] intValue];
if (endDay < startDay) {
// bingo!
}