2016-12-04 5 views
0

月から12などの単一の日付コンポーネントでデータベースからエントリをフィルタリングしたいとします。年が異なる可能性があるため、固定日付間の日付のエントリを照会することはできません。コアデータの日付コンポーネントでエントリを取得

それはこのように/仕事になります。

let request = NSPredicate(format: "date.month=%i", 12) 

答えて

0

あなたは述語のための時間間隔を使用する必要があります。

NSPredicate(format: "date >= %@ && date < %@", aDate, aDate.date(byAddingMonths:1)) 

あなたはおそらく、あなたの質問にNSPredicateNSFetchRequestを混同していることに注意してください。

月追加するには:

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) 
+0

私の質問を編集しました。あなたのアプローチが1年間の1ヶ月の特定の日付範囲を参照することを理解している限り。正しい?私は年を問わず月= 11と言うことですべてのエントリを見つける必要があります。 – matteok

+0

@matteok「日付」には月情報が含まれていないので、それを行うには本当に良い方法はありません。この答えは、別の年の日付に対して繰り返し使用する必要があります。 –

関連する問題