获取一系列NSDates与另一个NSDates范围相交的天数

时间:2014-05-08 15:11:08

标签: ios nsdate

我在获取一系列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;
}

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;

然后获取使用您方法的人之间的天数。

检查它们是否相交只是比较开始日期和结束日期。如果开始在结束之后,则它们不相交。