【Firestore】Swift で該当する月のデータを取得する
今回は、Firestore
に保存されているデータで、該当する月のデータのみを取得してくる方法のサンプルを紹介していきたいと思います。
結論
サンプル実装は、Ballcap
という Firestore
のラッパーライブラリを使っていますが、基本的にやることは同じで isGreaterThanOrEqualTo
と isLessThanOrEqualTo
で Date
の範囲を指定してあげます。今回の場合は、該当する月の範囲でデータを取得したいので、Calendar.current.dateComponents([.year, .month], from: date)
で date
が該当する月の初日の Date
を取得しています。
extension DataSource.Query { func `where`(_ keyPath: String, inThisMonth date: Date) -> DataSource.Query { let components = Calendar.current.dateComponents([.year, .month], from: date) guard let start = Calendar.current.date(from: components), let end = Calendar.current.date(byAdding: .month, value: 1, to: start) else { fatalError("Could not find start date or calculate end date.") } return `where`(keyPath, isGreaterThanOrEqualTo: start).`where`(keyPath, isLessThanOrEqualTo: end) } }
該当する月ではなく、該当する日を取得したい場合は下記のようにします。
extension DataSource.Query { func `where`(_ keyPath: String, inThisDay date: Date) -> DataSource.Query { let components = Calendar.current.dateComponents([.year, .month, .day], from: date) guard let start = Calendar.current.date(from: components), let end = Calendar.current.date(byAdding: .day, value: 1, to: start) else { fatalError("Could not find start date or calculate end date.") } return `where`(keyPath, isGreaterThanOrEqualTo: start).`where`(keyPath, isLessThanOrEqualTo: end) } }
という感じで本日も以上になります👷♀️ それではまた明日〜
参考
- https://medium.com/@karsonbraaten/swift-and-firestore-query-for-fields-with-todays-date-d07bea56c79d