iPhone iOS NSDate如何检测日期范围是否包括一个月的开始?

iPhone iOS NSDate如何检测日期范围是否包括一个月的开始?,iphone,objective-c,ios,nsdate,nscalendar,Iphone,Objective C,Ios,Nsdate,Nscalendar,我在UITableView中显示了一组事件。每个活动都有一个开始日期和结束日期,两个日期之间有1-3天 我试图检测一个特定的日期范围是否包括一个月的开始(例如:8月1日),并向该表视图单元格添加一个特殊标记 我已经读到,NSDate和日历操作是昂贵的操作,我的表视图已经不是世界上最快的了如何有效地确定日期范围是否包括月初?检查两个结束日期的月值,如果它们不同,则有月初,否则没有 编辑:首先检查任何端点(开始或结束)日期日期值是否等于1。从实用角度考虑,您可以检查每个日期的月份: NSCalend

我在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
day值小于
startDate
day值,那么您知道您在某处有一个第一个。显然,只有在事件跨度不到一个月时(你说是这样的),这种方法才能正常工作。

你可以检查结束日期是否低于开始日期

例如:开始=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!
}
NSDate*开始、结束;
NSInteger startDay=[[start descriptionWithCalendarFormat:@“%d”时区:nil语言环境:nil]intValue];
NSInteger endDay=[[start descriptionWithCalendarFormat:@“%d”时区:nil语言环境:nil]intValue];
如果(结束日<开始日){
//宾果!
}

加上月份相同,但其中一个日期是第一个日期的情况。可能首先检查日期值是否等于1:)@rad结束日期日期值高于开始日期,因此这将起作用。:)反例开始=6月1日结束=6月3日的可能重复