在数组中查找具有最接近当前时间的日期的对象

时间:2014-04-03 15:44:18

标签: ios cocoa-touch nsarray nsdate

我有一个对象数组,每个对象都有NSDate属性,名为" date"。

如何找到与当前时间最接近的对象?

2 个答案:

答案 0 :(得分:4)

这将使nearestObject与具有最接近日期的对象保持一致。如果你不想要过去的日期,那么摆脱ABS并确保间隔为正。

    MyObjectType *closestObject;
    NSTimeInterval closestInterval = DBL_MAX;

    for (MyObjectType *myObject in array) {
        NSTimeInterval interval = ABS([myObject.date timeIntervalSinceDate:[NSDate date]]);
        if (interval < closestInterval) {
            closestInterval = interval;
            closestObject = myObject;
        }
    }

答案 1 :(得分:1)

- (NSDate *)closestDateFromArray:(NSArray *)dateArray
{
    double smallestDifference = DBL_MAX; // thanks bgfriend0
    NSDate *closestDate = nil;

    for (NSDate *date in dateArray) {
        // suggested by Henri Normak
        if ([date timeIntervalSinceNow] <= someThresholdValue) {
            return date;
            // you could set some value that is a "good enough" value.
            // i.e. if the date IS NOW then nothing is going to be closer.
        }

        if (ABS([date timeIntervalSinceNow]) < smallestDifference) {
            smallestDifference = ABS([date timeIntervalSinceNow]);
            closestDate = date;
        }
    }

    return closestDate;
}

这样的事情应该可以解决问题。

如果数组是具有日期属性的对象数组,那么您可以完全相同,只需从对象中获取日期以进行比较。