Ios 获取一系列NSDate与另一系列NSDate相交的天数

Ios 获取一系列NSDate与另一系列NSDate相交的天数,ios,nsdate,Ios,Nsdate,我在获取一系列NSDate与另一系列NSDate相交的天数时遇到问题 场景1: 主要范围:3月8日至6月8日 检查范围:4月8日至5月8日 那么相交的天数就是从4月8日到5月8日的天数 场景2: 主要范围:3月8日至6月8日 检查范围:2月8日至3月15日 那么相交的天数就是从3月8日到3月15日的天数 场景3: 主要范围:3月8日至6月8日 检查范围:5月19日至6月15日 那么相交的天数就是从5月19日到6月8日的天数 场景4: 主要范围:3月8日至6月8日 检查范围:3月1日至6月9日 那

我在获取一系列NSDate与另一系列NSDate相交的天数时遇到问题

场景1:
主要范围:3月8日至6月8日
检查范围:4月8日至5月8日
那么相交的天数就是从4月8日到5月8日的天数

场景2:
主要范围:3月8日至6月8日
检查范围:2月8日至3月15日
那么相交的天数就是从3月8日到3月15日的天数

场景3:
主要范围:3月8日至6月8日
检查范围:5月19日至6月15日
那么相交的天数就是从5月19日到6月8日的天数

场景4:
主要范围: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;
}

您的方法只需要两个日期,因此您需要获得适当的两个日期来提供给该方法

假设它们相交:

要做到这一点,您需要做的就是将两个开始日期进行比较,然后将两个结束日期进行比较。最后的开始日期和最早的结束日期将控制交叉点的范围

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;
然后获取使用您的方法的时间间隔


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

您需要四个日期才能得到答案。你发布的方法只需要两个日期。请提供一个链接,指向你从中获得该代码的问题。