7

我有一个排序的 NSDates 数组。有人可以帮助我如何在数组中找到最接近当前日期的日期吗?

我需要获取最接近日期的索引,以便可以在表格视图中滚动到该日期。

例如,如果我有 2013 年 1 月 1 日、2013 年 1 月 6 日、2013 年 1 月 9 日和 2013 年 1 月 10 日。我想要 2013 年 1 月 6 日的索引。

希望这是有道理的。谢谢您的帮助。

更新:

我正在尝试这个:

    NSTimeInterval interval = 0;
    NSUInteger indexOfDate;
    for (NSDate * date in m_arEventsSorted)
    {               
        if(abs([date timeIntervalSinceDate:[NSDate date]]) < interval)
        {
            interval = abs([date timeIntervalSinceDate:[NSDate date]]);
            indexOfDate = [m_arEventsSorted indexOfObject:date];
        }
    }
4

5 回答 5

7

NSDate提供返回(a 'd ) 的timeIntervalSinceNow( reference ) 方法。只需使用此功能即可找到每个日期与现在之间的最小差异。NSTimeIntervaltypedefdoublefabs()

于 2013-01-07T11:25:11.327 回答
2

我会推荐 timeIntervalSinceDate: 函数。像这样的东西(代码未经测试!):

NSDate *currentDate = [NSDate date];
double min = [currentDate timeIntervalSinceDate:[array objectAtIndex:0]];
int minIndex = 0;
for (int i = 1; i < [array count]; ++i)
{
     double currentmin = [currentDate timeIntervalSinceDate:[array objectAtIndex:i]];
     if (currentmin < min) {
           min = currentmin;
           minIndex = i;
     }
}

您可以从 minIndex 获取最接近的索引。

于 2013-01-07T11:29:46.160 回答
1

这应该有效:

NSDate *closestDate;
for( NSDate *tempDate in dates ){
    NSInteger tempDateInterval = [tempDate timeIntervalSinceNow];
    //to work with positive and negative time difference
    if( tempDateInterval < 0 ){
        tempDateInterval *= -1;
    }
    NSInteger closestDateInterval = [closestDate timeIntervalSinceNow];
    if( closestDateInterval < 0 ){
        closestDateInterval *= -1;
    }
    if( tempDateInterval < closestDateInterval ){
        closestDate = tempDate;
    }
}
于 2013-01-07T11:29:01.090 回答
0

我敢肯定有很多方法可以给猫剥皮,但我个人最喜欢的剥皮机制是将日期转换为纪元时间,这样你就知道你在比较橘子和橘子,只需将日期比较为秒。这也消除了时区问题。

如果您需要确保选择最接近日期的时间,您可能需要使用时间的 00:00:01 和 23:59:59 测试日期并使用最小的结果。

采用

long secondsToDate = [date timeIntervalSince1970];
于 2013-01-07T11:29:27.893 回答
0

根据 Roland Keesom 的回答,这对我来说是这样的:

 NSDate *currentDate = [[objects objectAtIndex:0] valueForKey:@"date"];
    int minIndex = 0;
    for (int i = 1; i < [objects count]; ++i)
    {
        NSDate *tempDate = [[objects objectAtIndex:i] valueForKey:@"date"];
        NSInteger tempDateInterval = [tempDate timeIntervalSinceNow];
        if (tempDateInterval < 0) tempDateInterval *= -1;
        NSInteger closestDateInterval = [currentDate timeIntervalSinceNow];
        if (closestDateInterval < 0) closestDateInterval *= -1;
        if( tempDateInterval < closestDateInterval ){
            currentDate = tempDate;
            minIndex = i;
        }
    }

minIndex返回objects数组中距今天最近的日期的索引。

于 2015-01-23T16:02:55.357 回答