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 в тот же день. Может быть, вам нужно сравнить время, отдельно.