Предикат Core Data для нахождения x дней после даты
У меня есть базовая модель данных:
Book
----
name
release_date
Мне нужно получить все книги, которые прошли как минимум два дня с момента их релиза,
И я хочу сделать это с NSPredicate
(не загружать все книги в память, а затем зацикливать и проверять)
Я ищу что-то вроде этого:
NSDate *now = [NSDate date];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"release_date + "48 hours" <= %@", now];
2 ответа
Решение
Предикат не изменит дату для вас. Вы должны создать соответствующую дату (исходя из текущей даты и используя NSDateComponents
) и передать это предикату. Ты можешь использовать <=
в предикате для фильтра для более старых дат.
Другими словами, не думайте о проблеме как:
@"release_date + "48 hours" <= %@", now
думать об этом как:
@"release_date <= %@", now - "48 hours"
так что ваша проблема просто получить now - "48 hours"
дата для перехода к предикату.
Я думаю, вы хотите что-то подобное:
NSDate *date2DaysBefore = [NSDate dateWithTimeIntervalSinceNow:-2*24*3600];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"release_date <= %@", date2DaysBefore];