比较两个NSDate日期和时间,忽略秒数。

4

我想比较两个日期和时间,忽略秒数。下面是我尝试过的代码,但似乎不成功。有没有人能告诉我哪里出了问题或提供更好的解决方案?谢谢

-(BOOL)checkIfTimePassed{

    NSDate *today = [NSDate date];

    BOOL isTimePassed = [[NSCalendar currentCalendar] compareDate:today toDate:self.whenDate toUnitGranularity:NSCalendarUnitMinute] != NSOrderedAscending;

    return isTimePassed;
}

这段代码应该是可以工作的。您能否请给我们展示一下您尝试比较的两个日期? - Sulthan
假设今天是 [NSDate date],而 self.whenDate 是几秒钟前的某个时间,但分钟数相同,那么它会显示时间已经过去。 - Hardik Amal
2
请注意这样的比较方式,如果您比较的是 10:01:5010:01:55,忽略秒数,实际上您正在比较 10:0110:01。由于接近的时间将被视为 NSOrderedSame,因此您必须非常小心地处理条件。 - Sulthan
3个回答

4
您的比较有误。请尝试以下操作。注意参数和比较的变化。
-(BOOL)checkIfTimePassed{

    NSDate *today = [NSDate date];

    BOOL isTimePassed = [[NSCalendar currentCalendar] compareDate:self.whenDate toDate:today toUnitGranularity:NSCalendarUnitMinute] == NSOrderedAscending;

    return isTimePassed;
}

不起作用。即使时间过去了,它也会返回NO。 - Hardik Amal
我刚刚尝试了一下,时间相差略大于一分钟,返回了“是”。 - LGP

0

目前看来,这似乎是可行的解决方案。如果有更好的解决方案,请发帖分享。

-(BOOL)checkIfTimePassed{

    NSDate *today = [NSDate date];

    NSComparisonResult result = [[NSCalendar currentCalendar] compareDate:today toDate:self.whenDate toUnitGranularity:NSCalendarUnitMinute];

    if(result==NSOrderedAscending){
        NSLog(@"today is less");
        return NO;
    }
    else if(result==NSOrderedDescending)
    {
        NSLog(@"newDate is less");
        return YES;
    }
    else
    {
        NSLog(@"Both dates are same");
        return NO;
    }
}

我检查了一下,它返回的结果与我的解决方案完全相同。请告诉我为什么我的解决方案不正确。 - LGP
它返回 NO,你的也是。正如你所看到的,我的代码比较的是 == NSOrderedAscending,因此当返回值为 NSOrderedSame 时,它必须返回 NO - LGP

0
NSDate *startDate = [NSDate date];
NSDate *endDate = [startDate dateByAddingTimeInterval:+7*24*60*60];

NSDateFormatter *df=[[NSDateFormatter alloc] init];


    [df setDateFormat:@"yyyy-MM-dd hh:mm a"];



- (BOOL)validateDates:(NSDate*)startDate EndDate:(NSDate*)endDate{
    NSComparisonResult dateCompareResutFinal = [startDate compare:endDate];

    if (dateCompareResutFinal == NSOrderedDescending) {
        [RKDropdownAlert dismissAllAlert];
        [RKDropdownAlert title:AlertNotificationError message:@"Start date should be less than End date" backgroundColor:[UIColor colorWithRed:0.0/255.0 green:0.0/255.0 blue:0.0/255.0 alpha:0.7] textColor:[UIColor whiteColor] time:2 delegate:self]
        ;
        return NO;
    }else if (dateCompareResutFinal == NSOrderedSame) {
        [RKDropdownAlert dismissAllAlert];
        [RKDropdownAlert title:AlertNotificationError message:@"Both dates cannot be same" backgroundColor:[UIColor colorWithRed:0.0/255.0 green:0.0/255.0 blue:0.0/255.0 alpha:0.7] textColor:[UIColor whiteColor] time:2 delegate:self];

        return NO;
    }else{
        return YES;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接