2011-12-21 3 views
4

я использую следующую функцию, чтобы проверить, если сообщение истекло -iOS - как сравнить два раза?

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

Это прекрасно работает, если я сравниваю две разные даты. Однако он возвращает false, если сообщение истекло раньше в день сегодня. Любые идеи о том, как я могу это исправить?

+1

Этого не должно быть, также существует разница в 1 секунду между экземплярами NSDate. Добавьте 'NSLog()' с двумя датами, чтобы увидеть, действительно ли они разные. – Pascal

+0

Вы были правы. Если вы включите его в ответ, я могу его принять. – Suchi

ответ

2

(Добавление мой комментарий как ответ :)

Это должно не бывает, также достаточно 1 секунды разницы между NSDate экземплярами. Добавьте NSLog() с обеими датами, чтобы узнать, действительно ли они разные.

0

Проверьте, не возвращается ли NSOrderedSame в тот же день. Возможно, вам нужно также сравнить время, отдельно.

2

Вы можете использовать системный метод класса NSDate для сравнения с текущим временем

- (NSTimeInterval)timeIntervalSinceNow 

Возвращаемое значением является интервалом между приемником и текущей датой и временем. Если приемник находится раньше текущей даты и времени, возвращаемое значение отрицательное.

Так правильный код будет

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

Или, если вы хотите, чтобы сравнить 2 даты, используйте

- (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; 
    } 
} 
Смежные вопросы