常见的对日期进行排序

引言:

在项目中经常需要对数据进行排序,这里模拟一个数组,由于项目中返回的json的key对应的value为空,所以排序的时候需要判断obj1和obj2是否为空,还有升序和降序的问题根据


# 一. 代码实现

- (void)test {
    
    NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"2019/03/01/",@"2013/03/02",@"2013/03/07",@"2014/03/01/", [NSNull null], nil];
    
    array = (NSMutableArray *)[array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy/MM/dd/"];
        if (obj1 == [NSNull null]) {
            obj1 = @"0000/00/00";
        }
        
        if (obj2 == [NSNull null]) {
            obj2 = @"0000/00/00";
        }
        NSDate *date1 = [formatter dateFromString:obj1];
        NSDate *date2 = [formatter dateFromString:obj2];
        NSComparisonResult result = [date1 compare:date2];
        return result == NSOrderedAscending;
    }];
    
    for (int i = 0; i < [array count]; i++) {
        NSLog(@"%@", [array objectAtIndex:i]);
    }
}


# 二. 运行结果

return result == NSOrderedDescending; 这行代码是控制排序是 降序(NSOrderedDescending) 、升序(NSOrderedAscending) 还是 相等(NSOrderedSame

升序结果:

2017-06-16 17:16:14.930 TestH5[15888:669365] 2019/03/01/
2017-06-16 17:16:14.930 TestH5[15888:669365] 2014/03/01/
2017-06-16 17:16:14.931 TestH5[15888:669365] 2013/03/07
2017-06-16 17:16:14.931 TestH5[15888:669365] 2013/03/02
2017-06-16 17:16:14.931 TestH5[15888:669365] <null>

降序结果:

2017-06-16 17:17:21.692 TestH5[15946:671080] 2013/03/02
2017-06-16 17:17:21.692 TestH5[15946:671080] 2013/03/07
2017-06-16 17:17:21.692 TestH5[15946:671080] 2014/03/01/
2017-06-16 17:17:21.692 TestH5[15946:671080] 2019/03/01/
2017-06-16 17:17:21.692 TestH5[15946:671080] <null>