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
提供了返回NSTimeInterval
( NSTimeInterval
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的索引。