我在获取一系列NSDates与另一个NSDates范围相交的天数时遇到问题。
Scenario1:
主要范围:3月8日 - 6月8日
需要检查的范围:4月8日 - 5月8日
然后,相交的天数是从4月8日到5月8日的天数
Scenario2:
主要范围:3月8日 - 6月8日
要检查的范围:2月8日 - 3月15日
然后,相交的天数是从3月8日到3月15日的天数
场景3:
主要范围:3月8日 - 6月8日
需要检查的范围:5月19日 - 6月15日
那么相交的天数是从May19到June8的天数
Scenario4:
主要范围:3月8日 - 6月8日
要检查的范围:3月1日 - 6月9日
然后,相交的天数是从3月8日到6月8日的天数
我首先使用startdate1(要检查的范围)和startdate2(主范围)来尝试使用下面的代码。如果是积极的我会包括,否则我不会。 然后使用enddate1(要检查的范围)和enddate2(主范围)。如果是积极的我会包括,否则我不会。 然后总结所有正值。 我从其中一篇文章中读到了这个解决方案,但看起来并不正确。
+ (NSInteger)daysBetweenTwoDates:(NSDate *)fromDateTime andDate:(NSDate*)toDateTime
{
NSDate *fromDate;
NSDate *toDate;
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar rangeOfUnit:NSDayCalendarUnit startDate:&fromDate interval:NULL forDate:fromDateTime];
[calendar rangeOfUnit:NSDayCalendarUnit startDate:&toDate interval:NULL forDate:toDateTime];
NSDateComponents *difference = [calendar components:NSDayCalendarUnit fromDate:fromDate toDate:toDate options:0];
return [difference day] + 1;
}
答案 0 :(得分:2)
您的方法只需要两个日期,因此您需要获得适当的两个日期才能提供给该方法。
假设它们相交:
要做到这一点,您需要做的就是取两个开始日期并进行比较,然后取两个结束日期并进行比较。最后的开始日期和最早的结束日期将决定您的交叉范围。
NSDate* correctStartDate;
NSComparisonResult result = [startdate1 compare:startdate2];
if(result == NSOrderedDescending)
correctStartDate = startdate1;
else
correctStartDate = startdate2;
NSDate* correctEndDate;
NSComparisonResult result = [enddate1 compare:enddate2];
if(result == NSOrderedAscending)
correctEndDate = enddate1;
else
correctEndDate = enddate2;
然后获取使用您方法的人之间的天数。
检查它们是否相交只是比较开始日期和结束日期。如果开始在结束之后,则它们不相交。