NSPredicates.swift 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import CoreData
  2. import Foundation
  3. extension Date {
  4. static var startOfToday: Date {
  5. Calendar.current.startOfDay(for: Date())
  6. }
  7. static var oneDayAgoInMinutes: Date {
  8. Calendar.current.date(byAdding: .minute, value: -1440, to: Date())!
  9. }
  10. static var oneDayAgo: Date {
  11. Calendar.current.date(byAdding: .day, value: -1, to: Date())!
  12. }
  13. static var oneHourAgo: Date {
  14. Calendar.current.date(byAdding: .minute, value: -60, to: Date())!
  15. }
  16. static var halfHourAgo: Date {
  17. Calendar.current.date(byAdding: .minute, value: -30, to: Date())!
  18. }
  19. static var twentyMinutesAgo: Date {
  20. Calendar.current.date(byAdding: .minute, value: -20, to: Date())!
  21. }
  22. static var twoHoursAgo: Date {
  23. Calendar.current.date(byAdding: .hour, value: -2, to: Date())!
  24. }
  25. static var fourHoursAgo: Date {
  26. Calendar.current.date(byAdding: .hour, value: -4, to: Date())!
  27. }
  28. static var sixHoursAgo: Date {
  29. Calendar.current.date(byAdding: .hour, value: -6, to: Date())!
  30. }
  31. static var oneWeekAgo: Date {
  32. Calendar.current.date(byAdding: .day, value: -7, to: Date())!
  33. }
  34. static var oneMonthAgo: Date {
  35. Calendar.current.date(byAdding: .month, value: -1, to: Date())!
  36. }
  37. static var threeMonthsAgo: Date {
  38. Calendar.current.date(byAdding: .month, value: -3, to: Date())!
  39. }
  40. }
  41. extension NSPredicate {
  42. static let all = NSPredicate(format: "TRUEPREDICATE")
  43. static let none = NSPredicate(format: "FALSEPREDICATE")
  44. static var predicateForOneDayAgoInMinutes: NSPredicate {
  45. let date = Date.oneDayAgoInMinutes
  46. return NSPredicate(format: "date >= %@", date as NSDate)
  47. }
  48. static var predicateForOneDayAgo: NSPredicate {
  49. let date = Date.oneDayAgo
  50. return NSPredicate(format: "date >= %@", date as NSDate)
  51. }
  52. /// For entities keyed on `startDate` (OverrideRunStored, TempTargetRunStored).
  53. static var predicateForStartDateOneDayAgo: NSPredicate {
  54. let date = Date.oneDayAgo
  55. return NSPredicate(format: "startDate >= %@", date as NSDate)
  56. }
  57. static var carbsHistory: NSPredicate {
  58. let date = Date.oneDayAgo
  59. return NSPredicate(format: "date >= %@ AND carbs > 0", date as NSDate)
  60. }
  61. static var predicateForOneHourAgo: NSPredicate {
  62. let date = Date.oneHourAgo
  63. return NSPredicate(format: "date >= %@", date as NSDate)
  64. }
  65. static var predicateFor30MinAgo: NSPredicate {
  66. let date = Date.halfHourAgo
  67. return NSPredicate(format: "date >= %@", date as NSDate)
  68. }
  69. static var predicateFor20MinAgo: NSPredicate {
  70. let date = Date.twentyMinutesAgo
  71. return NSPredicate(format: "date >= %@", date as NSDate)
  72. }
  73. static var predicateFor30MinAgoForDetermination: NSPredicate {
  74. let date = Date.halfHourAgo
  75. return NSPredicate(format: "deliverAt >= %@", date as NSDate)
  76. }
  77. static var predicateFor120MinAgo: NSPredicate {
  78. let date = Date.twoHoursAgo
  79. return NSPredicate(format: "date >= %@", date as NSDate)
  80. }
  81. static var predicateForFourHoursAgo: NSPredicate {
  82. let date = Date.fourHoursAgo
  83. return NSPredicate(format: "date >= %@", date as NSDate)
  84. }
  85. static var predicateForSixHoursAgo: NSPredicate {
  86. let date = Date.sixHoursAgo
  87. return NSPredicate(format: "date >= %@", date as NSDate)
  88. }
  89. static var predicateForOneWeek: NSPredicate {
  90. let date = Date.oneWeekAgo
  91. return NSPredicate(format: "date >= %@", date as NSDate)
  92. }
  93. static var predicateForOneMonth: NSPredicate {
  94. let date = Date.oneMonthAgo
  95. return NSPredicate(format: "date >= %@", date as NSDate)
  96. }
  97. static var predicateForThreeMonths: NSPredicate {
  98. let date = Date.threeMonthsAgo
  99. return NSPredicate(format: "date >= %@", date as NSDate)
  100. }
  101. static func predicateForDateBetween(start: Date, end: Date) -> NSPredicate {
  102. NSPredicate(format: "date >= %@ AND date <= %@", start as NSDate, end as NSDate)
  103. }
  104. static func predicateForDeliverAtBetween(start: Date, end: Date) -> NSPredicate {
  105. NSPredicate(format: "deliverAt >= %@ AND deliverAt <= %@", start as NSDate, end as NSDate)
  106. }
  107. static func predicateForTimestampBetween(start: Date, end: Date) -> NSPredicate {
  108. NSPredicate(format: "timestamp >= %@ AND timestamp <= %@", start as NSDate, end as NSDate)
  109. }
  110. }