如何比较NSDates以查找数组中的最早和最晚日期?

The*_*imp 4 iphone objective-c nsdate

我的代码存在很多问题,这些问题决定了数组中最早的日期和最新日期.这是我正在使用的代码:

NSDate *startDate = nil; // Earliest date
NSDate *endDate = nil; // Latest date

for (id entry in myArray) 
{
    NSDate *date = [entry objectForKey:kDate];

    if (startDate == nil && endDate == nil) 
    {
        startDate = date;
        endDate = date;
    }
    else if ([date compare:endDate] == NSOrderedAscending)
    {
        startDate = date;
    }
    else if ([date compare:startDate] == NSOrderedDescending)
    {
        endDate = date;
    }

    date = nil;
}
Run Code Online (Sandbox Code Playgroud)

请有人帮我解决我出错的地方吗?

OdN*_*iry 11

您也可以排序NSArrayNSDates使用方法:

array = [array sortedArrayUsingSelector:@selector(compare:)];
Run Code Online (Sandbox Code Playgroud)

然后[array firstObject]将是第一个日期(例如1970-01-01T00:00:00),最后一个对象:[array lastObject]将是最后日期:(例如2011-01-12T00:00:00)


mat*_*way 7

当然你在陈述中设置startDateendDate错误的方式else if?你不想要这个:

NSDate *startDate = nil; // Earliest date
NSDate *endDate = nil; // Latest date

for (id entry in myArray) 
{
    NSDate *date = [entry objectForKey:kDate];

    if (startDate == nil && endDate == nil) 
    {
        startDate = date;
        endDate = date;
    }
    if ([date compare:startDate] == NSOrderedAscending)
    {
        startDate = date;
    }
    if ([date compare:endDate] == NSOrderedDescending)
    {
        endDate = date;
    }

    date = nil;
}
Run Code Online (Sandbox Code Playgroud)