NSDatefind最近的date到今天

我有一个sorting的NSDates数组。 有人可以帮我怎样才能find最接近当前date的数组中的date?

我需要得到最接近的date的索引,以便我可以在我的tableview中滚动到该date。

例如,如果我有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]; } } 

NSDate提供了返回NSTimeIntervalNSTimeInterval double )的timeIntervalSinceNow ( reference )方法。 只需使用fabs()函数就可以find每个date和现在之间的最小差异。

我会推荐timeIntervalSinceDate:函数。 像这样的东西(代码没有testing!):

 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得到最接近的索引。

这应该工作:

 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; } } 

我敢肯定有很多方法来剥皮猫,但我个人最喜欢的皮肤机制是将date转换为纪元时间,所以你知道你正在比较橙子和橙子,只是比较date为秒。 这也消除了时区问题。

如果您需要确保您select的date最近的时间,您可能需要使用时间的00:00:01和23:59:59testingdate,并使用最小的结果。

使用

 long secondsToDate = [date timeIntervalSince1970]; 

基于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数组中距今天最近的date的索引。