まだ探しているでしょうか???
自分も、日付をfirestoreに保存する過程で、
DateFormatterを利用しハマったことがあります。
結論から言うと、DateFormatterは不正確となることがあるので、
利用は表現形式を変え表示する時にのみ使うのが良いように感じます。
(自分はその時ですら使わないようにしています。)
試しにprint()で入力前の値、保存された値と呼び出した値を
それぞれ出力してみると違いが出るのではないでしょうか?
string→Dateには自分はcalendarを利用するようにしています。
下記にサンプルを載せておきます。適宜"2019/1/1"の表現系を変えてみてください。
Swift
1 // MARK: -- Format Converter
2 func makeDatefromString(string: String) -> Date {
3 let array = string.components(separatedBy: "/")
4 let calendar = Calendar.current
5 let components = DateComponents(
6 calendar: calendar,
7 year: Int(array[0]),
8 month: Int(array[1]),
9 day: Int(array[2]),
10 hour: 0,
11 minute: 0)
12 let date = calendar.date(from: components)
13 return date!
14 }
15
16 func makeStringfromDate(date: Date) -> String {
17 let calendar = Calendar.current
18 let cyear = calendar.component(.year, from: date)
19 let cmonth = calendar.component(.month, from: date)
20 let cday = calendar.component(.day, from: date)
21 let date_S = String(cyear) + String(cmonth) + String(cday)
22 return date_S
23 }
下記参照
http://y-hryk.hatenablog.com/entry/2018/04/22/014556
さらに、firestoreでの取得方法は
Swift
1var ref: DocumentReference? = nil // グローバルで宣言
2
3func getData() {
4 let db = Firestore.firestore()
5 db.collection("hoge").whereField("date", isGreaterThan: *****).getDocuments { (querySnapshot, err) in
6 }
7}
上記が以上なので、同様にisLessThanで制限すれば指定期間で取得できると思います。
Date型でそのまま比較できるかはわかりません。
自分はtimeintervalsince1970を利用して、
単純なDouble型に変換しています。
一手間かかりますが、その方が検索も早いのではないかと勝手に思ってます。