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

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

4 голосов
/ 21 декабря 2011

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

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

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

Ответы [ 4 ]

2 голосов
/ 22 декабря 2011

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

- (NSTimeInterval)timeIntervalSinceNow

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

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

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

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

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate
2 голосов
/ 05 января 2012

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

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

1 голос
/ 24 июля 2014
+(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;
   }
}
0 голосов
/ 22 декабря 2011

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

...