【问题标题】:Can I use date calculation inside NSPredicate我可以在 NSPredicate 中使用日期计算吗
【发布时间】:2014-06-14 17:20:03
【问题描述】:

我在CoreDataDrug 实体中有一个NSDate 属性,称为expiringDate,我需要获取日期在expiringDate 之前30 天间隔内的所有实体。 我不知道是否以及如何在NSPredicate 中包含这种计算。 我想避免在数据库结构中使用一种新的属性,一种thirtyDayFromExpiryDate,通过NSTimeInterval 计算获取日期并在谓词中使用它来解决问题。 有可能吗?

【问题讨论】:

  • 你能告诉我们你尝试了什么吗?
  • @fraguida 你找到解决办法了吗?

标签: ios core-data nsdate nspredicate nstimeinterval


【解决方案1】:

您正在尝试返回所有结果:

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]];

【讨论】:

  • 我必须获取所有具有 expiryDate > [NSDate date] && aMonthToExpityDate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 2014-09-01
相关资源
最近更新 更多