NSDate 比较两个日期不起作用

NSDate Comparing Two Dates Not Working

我正在使用以下代码比较两个日期,我希望代码为 return "newDate is less",因为今天的日期是 2018-03-16,但实际上是 return ing 两个日期相同。有什么办法可以解决这个问题?我知道它一定很简单只是不能把我的手指放在上面。

    NSDateFormatter *dateFormatter=[NSDateFormatter new];
    NSDate *today = [NSDate date]; 
    NSDate *newDate = [dateFormatter dateFromString:@"2018-03-14"]; 

    if([today compare:newDate]==NSOrderedAscending){
        NSLog(@"today is less");
    }
    else if([today compare:newDate]==NSOrderedDescending){
        NSLog(@"newDate is less");
    }
    else{
        NSLog(@"Both dates are same");
    }

那是因为你的 newDate 是零。您还没有为 dateFormatter 指定日期格式。

NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; //missing statement in your code
NSDate *today = [NSDate date];
NSDate *newDate = [dateFormatter dateFromString:@"2018-03-14"];

现在它按预期打印输出

编辑 1:

由于 OP 想要比较没有任何时间组件的日期,我正在更新代码以执行相同的操作

NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *today = [NSDate date];
NSString *todayString = [dateFormatter stringFromDate:today];
today = [dateFormatter dateFromString:todayString];
NSDate *newDate = [dateFormatter dateFromString:@"2018-03-15"];

if([today compare:newDate]==NSOrderedAscending){
    NSLog(@"today is less");
}
else if([today compare:newDate]==NSOrderedDescending){
    NSLog(@"newDate is less");
}
else{
    NSLog(@"Both dates are same");
}

现在代码在新日期指定为 2018-03-15 时显示 Both dates are same,在新日期指定为 2018-03-14

时显示 newDate is less

希望对您有所帮助