iOS - как сравнить два раза?

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

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

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

4 ответа

Решение

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

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

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

- (NSTimeInterval)timeIntervalSinceNow

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

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

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

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

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate
+(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;
   }
}

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

Другие вопросы по тегам