Предикат 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];
Другие вопросы по тегам