我可以在NSPredicate中使用日期计算吗?

时间:2014-06-14 17:20:04

标签: ios core-data nsdate nspredicate nstimeinterval

我在NSDate中的Drug实体中有一个CoreData属性,名为expiringDate,我需要获取日期在30之间的所有实体expiringDate之前的几天。 我无法弄清楚是否以及如何在NSPredicate中包含此类计算。 我想避免在数据库结构中使用新属性thirtyDayFromExpiryDate,通过NSTimeInterval计算获取日期,并在谓词中使用该属性来解决问题。 有可能吗?

1 个答案:

答案 0 :(得分:0)

您尝试使用以下命令返回所有结果:

expiryDate > [NSDate date] && aMonthToExpityDate <= [NSDate date]

,其中

aMonthToExpiryDate = expiryDate - 30 days

因此,您可以简化将查询重写为:

expiryDate > [NSDate date] && (expiryDate - 30 days) <= [NSDate date]

expirayDate > [NSDate date] && (expiryDate <= [NSDate date] + 30 days)

您现在可以在谓词中使用,因为计算是静态的:

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"expiryDate BETWEEN (%@, %@)",
                          [NSDate date],
                          [NSDate dateWithTimeIntervalSinceNow:k30Days]];