【问题标题】:Getting number of days where a range of NSDates intersects another range of NSDates获取一系列 NSDates 与另一个 NSDates 范围相交的天数
【发布时间】:2014-05-08 15:11:08
【问题描述】:

我在获取一个 NSDates 范围与另一个 NSDates 范围相交的天数时遇到问题。

场景1:
主要范围:March8 - June8
检查范围:April8 - May8
那么相交的天数就是 April8 - May8 的天数

场景2:
主要范围:March8 - June8
检查范围:Feb8 - March15
那么相交的天数就是 March8 - March15 的天数

场景3:
主要范围:March8 - June8
检查范围:May19 - June15
那么相交的天数就是May19-June8的天数

场景4:
主要范围:March8 - June8
检查范围:March1 - June9
那么相交的天数就是从 March8 到 June8 的天数

我尝试通过首先使用 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;
}

【问题讨论】:

标签: ios nsdate


【解决方案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;

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    相关资源
    最近更新 更多