0
月から12などの単一の日付コンポーネントでデータベースからエントリをフィルタリングしたいとします。年が異なる可能性があるため、固定日付間の日付のエントリを照会することはできません。コアデータの日付コンポーネントでエントリを取得
それはこのように/仕事になります。
let request = NSPredicate(format: "date.month=%i", 12)
月から12などの単一の日付コンポーネントでデータベースからエントリをフィルタリングしたいとします。年が異なる可能性があるため、固定日付間の日付のエントリを照会することはできません。コアデータの日付コンポーネントでエントリを取得
それはこのように/仕事になります。
let request = NSPredicate(format: "date.month=%i", 12)
あなたは述語のための時間間隔を使用する必要があります。
NSPredicate(format: "date >= %@ && date < %@", aDate, aDate.date(byAddingMonths:1))
あなたはおそらく、あなたの質問にNSPredicate
でNSFetchRequest
を混同していることに注意してください。
月追加するには:
extension Date {
func date(byAddingMonths months: Int) -> Date {
var diff = DateComponents()
diff.month = months
return Calendar.current.date(byAdding: diff, to: self)!
}
}
EDIT
質問を明確にした後、あなたが月の属性を必要と表示されます。エンティティにInt
属性を追加します。エンティティには、日付を変更するたびに月が自動的に入力されます(didSet
を上書きします)。日付から月を取得する方法は次のとおりです。
let month = Calendar.current.component(.month, from:theDate)
私の質問を編集しました。あなたのアプローチが1年間の1ヶ月の特定の日付範囲を参照することを理解している限り。正しい?私は年を問わず月= 11と言うことですべてのエントリを見つける必要があります。 – matteok
@matteok「日付」には月情報が含まれていないので、それを行うには本当に良い方法はありません。この答えは、別の年の日付に対して繰り返し使用する必要があります。 –