NSPredicates.swift 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import CoreData
  2. import Foundation
  3. extension Date {
  4. static var startOfToday: Date {
  5. Calendar.current.startOfDay(for: Date())
  6. }
  7. static var oneDayAgo: Date {
  8. Calendar.current.date(byAdding: .day, value: -1, to: Date())!
  9. }
  10. static var oneHourAgo: Date {
  11. Calendar.current.date(byAdding: .minute, value: -60, to: Date())!
  12. }
  13. static var halfHourAgo: Date {
  14. Calendar.current.date(byAdding: .minute, value: -30, to: Date())!
  15. }
  16. static var twentyMinutesAgo: Date {
  17. Calendar.current.date(byAdding: .minute, value: -20, to: Date())!
  18. }
  19. static var twoHoursAgo: Date {
  20. Calendar.current.date(byAdding: .hour, value: -2, to: Date())!
  21. }
  22. static var sixHoursAgo: Date {
  23. Calendar.current.date(byAdding: .hour, value: -6, to: Date())!
  24. }
  25. static var oneWeekAgo: Date {
  26. Calendar.current.date(byAdding: .day, value: -7, to: Date())!
  27. }
  28. static var oneMonthAgo: Date {
  29. Calendar.current.date(byAdding: .month, value: -1, to: Date())!
  30. }
  31. static var threeMonthsAgo: Date {
  32. Calendar.current.date(byAdding: .month, value: -3, to: Date())!
  33. }
  34. }
  35. extension NSPredicate {
  36. static let all = NSPredicate(format: "TRUEPREDICATE")
  37. static let none = NSPredicate(format: "FALSEPREDICATE")
  38. static var predicateForOneDayAgo: NSPredicate {
  39. let date = Date.oneDayAgo
  40. return NSPredicate(format: "date >= %@", date as NSDate)
  41. }
  42. static var predicateForOneHourAgo: NSPredicate {
  43. let date = Date.oneHourAgo
  44. return NSPredicate(format: "date >= %@", date as NSDate)
  45. }
  46. static var predicateFor30MinAgo: NSPredicate {
  47. let date = Date.halfHourAgo
  48. return NSPredicate(format: "date >= %@", date as NSDate)
  49. }
  50. static var predicateFor20MinAgo: NSPredicate {
  51. let date = Date.twentyMinutesAgo
  52. return NSPredicate(format: "date >= %@", date as NSDate)
  53. }
  54. static var predicateFor30MinAgoForDetermination: NSPredicate {
  55. let date = Date.halfHourAgo
  56. return NSPredicate(format: "deliverAt >= %@", date as NSDate)
  57. }
  58. static var predicateFor120MinAgo: NSPredicate {
  59. let date = Date.twoHoursAgo
  60. return NSPredicate(format: "date >= %@", date as NSDate)
  61. }
  62. static var predicateForSixHoursAgo: NSPredicate {
  63. let date = Date.sixHoursAgo
  64. return NSPredicate(format: "date >= %@", date as NSDate)
  65. }
  66. static var predicateForOneWeek: NSPredicate {
  67. let date = Date.oneWeekAgo
  68. return NSPredicate(format: "date >= %@", date as NSDate)
  69. }
  70. static var predicateForOneMonth: NSPredicate {
  71. let date = Date.oneMonthAgo
  72. return NSPredicate(format: "date >= %@", date as NSDate)
  73. }
  74. static var predicateForThreeMonths: NSPredicate {
  75. let date = Date.threeMonthsAgo
  76. return NSPredicate(format: "date >= %@", date as NSDate)
  77. }
  78. }