2011-12-21 73 views
4

我用下面的函数来检查,如果消息已过期 -iOS - 如何比较两次?

- (BOOL) hasExpired:(NSDate*)myDate 
{  
    if(myDate == nil) 
    { 
     return false; 
    } 
    NSDate *now = [NSDate date]; 
    return !([now compare:myDate] == NSOrderedAscending); 
} 

如果我比较两个不同的日期,这工作得很好。但是,如果邮件在今天早些时候过期,它将返回false。有关我如何修复它的任何想法?

+1

这应该不会发生,NSDate实例之间的1秒差异就足够了。添加一个'NSLog()'这两个日期,看看它们是否确实不同。 – Pascal 2011-12-21 20:12:54

+0

你是对的。如果你把它变成一个答案,我可以接受它。 – Suchi 2012-01-03 17:22:02

回答

2

(添加我的评论作为一个答案:)

这应该不会发生,NSDate实例之间也有1秒的差距就足够了。添加一个NSLog()与这两个日期,看看他们是否确实不同。

0

检查它是否在同一天返回NSOrderedSame。也许你需要分别比较时间。

2

可以使用的NSDate类的系统的方法,与当前时间进行比较

- (NSTimeInterval)timeIntervalSinceNow 

返回值是接收机和当前日期和时间之间的间隔。如果接收者早于当前日期和时间,则返回值为负值。

所以正确的代码将

- (BOOL) hasExpired:(NSDate*)myDate 
{ 
    return [myDate timeIntervalSinceNow] < 0.f; 
} 

或者,如果要比较两个日期,使用

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate 
1
+(BOOL)isEndDateBigger :(NSDate *)currDate :(NSDate *)endDate { 
    if ([currDate compare:endDate] == NSOrderedDescending) { 
    NSLog(@"date1 is later than date2"); 
    return YES; 
    } else if ([currDate compare:endDate] == NSOrderedAscending) { 
    return NO; 
    } else { 
    return NO; 
    } 
}