NSPredicates.swift 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. static var carbsHistory: NSPredicate {
  53. let date = Date.oneDayAgo
  54. return NSPredicate(format: "date >= %@ AND carbs > 0", date as NSDate)
  55. }
  56. static var predicateForOneHourAgo: NSPredicate {
  57. let date = Date.oneHourAgo
  58. return NSPredicate(format: "date >= %@", date as NSDate)
  59. }
  60. static var predicateFor30MinAgo: NSPredicate {
  61. let date = Date.halfHourAgo
  62. return NSPredicate(format: "date >= %@", date as NSDate)
  63. }
  64. static var predicateFor20MinAgo: NSPredicate {
  65. let date = Date.twentyMinutesAgo
  66. return NSPredicate(format: "date >= %@", date as NSDate)
  67. }
  68. static var predicateFor30MinAgoForDetermination: NSPredicate {
  69. let date = Date.halfHourAgo
  70. return NSPredicate(format: "deliverAt >= %@", date as NSDate)
  71. }
  72. static var predicateFor120MinAgo: NSPredicate {
  73. let date = Date.twoHoursAgo
  74. return NSPredicate(format: "date >= %@", date as NSDate)
  75. }
  76. static var predicateForFourHoursAgo: NSPredicate {
  77. let date = Date.fourHoursAgo
  78. return NSPredicate(format: "date >= %@", date as NSDate)
  79. }
  80. static var predicateForSixHoursAgo: NSPredicate {
  81. let date = Date.sixHoursAgo
  82. return NSPredicate(format: "date >= %@", date as NSDate)
  83. }
  84. static var predicateForOneWeek: NSPredicate {
  85. let date = Date.oneWeekAgo
  86. return NSPredicate(format: "date >= %@", date as NSDate)
  87. }
  88. static var predicateForOneMonth: NSPredicate {
  89. let date = Date.oneMonthAgo
  90. return NSPredicate(format: "date >= %@", date as NSDate)
  91. }
  92. static var predicateForThreeMonths: NSPredicate {
  93. let date = Date.threeMonthsAgo
  94. return NSPredicate(format: "date >= %@", date as NSDate)
  95. }
  96. static func predicateForDateBetween(start: Date, end: Date) -> NSPredicate {
  97. NSPredicate(format: "date >= %@ AND date <= %@", start as NSDate, end as NSDate)
  98. }
  99. static func predicateForDeliverAtBetween(start: Date, end: Date) -> NSPredicate {
  100. NSPredicate(format: "deliverAt >= %@ AND deliverAt <= %@", start as NSDate, end as NSDate)
  101. }
  102. static func predicateForTimestampBetween(start: Date, end: Date) -> NSPredicate {
  103. NSPredicate(format: "timestamp >= %@ AND timestamp <= %@", start as NSDate, end as NSDate)
  104. }
  105. }