2016-09-27 14 views
4

ユーザーにスワイプ可能なカレンダーを表示するホテル予約アプリがあります。今の最終目標は、予約された各日付の下に小さい点でインターフェイスのようなカレンダーを提供することです。今のところ、開始日と終了日(開始日と終了日はそれぞれ月の開始日と終了日)の間のすべての予約をコンソールに印刷しようとしています。Firebaseと日付フィルタの操作

しかし、これをFirebaseで使用することはできません。ここでのデータは、現時点ではFirebaseにある方法は次のとおりです。

{ 
    "reservations" : { 
    "-KSgRjwpssoZJWjV9ScM" : { 
     "checkin" : 1474950600, 
     "checkout" : 1475116200, 
     "customer" : "-KMVMMudWJlFeiimtgJl" 
    } 
    } 
} 

そして、ここでは私のスウィフトコードは、データを取得するためにです:

private var ref: FIRDatabaseReference! 

// viewdidload: 
ref = FIRDatabase.database().reference() 
ref.keepSynced(true) 

// logic to fetch data 
DispatchQueue.global().async { 

     // Background Processing 
     // Check Firebase for events between startdate and enddate 
     print("Fetching Reservations") 
     print(startDate.timeIntervalSince1970) 
     print(endDate.timeIntervalSince1970) 


     self.ref.child("reservations").queryStarting(atValue: startDate.timeIntervalSince1970, childKey: "checkin").observe(.childAdded, with: { (snapshot) -> Void in 

      print("Data Retrv.\n") 
      print(snapshot) 

     }) 
} 

はここで今、コンソール上に印刷する内容だ:

Fetching Reservations 
1469989800.0 
1472581800.0 
Fetching Reservations 
1472668200.0 
1475173800.0 

データが2番目の範囲に入ることははっきりとわかりましたが、まだそれを表示することはできません。

ここで間違っている可能性がありますか?ありがとう。

答えて

3

I'vは、このコードを試してみました、それが働いた:

let ref = FIRDatabase.database().reference() 
let refReservations = ref.child("reservations") 

let startDate: Double = 1472668200.0 

refReservations 
    .queryOrdered(byChild: "checkin") 
    .queryStarting(atValue: startDate) 
    .observeSingleEvent(of: .value) { (snap: FIRDataSnapshot) in 
    print(snap.value) 
    } 

あなたのコードと私の違いを私は1つのクエリより呼び出しされています

.queryOrdered(byChild: "checkin") 
.queryStarting(atValue: startDate) 

あなた:

.queryStarting(atValue: startDate, childKey: "checkin") 
+0

私が '.queryStarting(atValue:startDate、childKey:" checkin ")を使う理由は、月に基づいて予約をロードする必要があるからです。だから、ユーザーが別の月にスワイプすると、 'checkin'と' checkout'である 'x date'と' yyyy date'での予約のfirebaseを問い合わせます。だから、あなたの提案されたアプローチは、8月にも9月のような予約を私に与えます。なぜなら、タイムスタンプは(チェックインと比較して)よりも大きいからです。 –

+0

あなたの答えに追加すると、私はあなたのクエリを拡張することによって動作するようになった: 'self.ref.queryOrdered(byChild:" checkin ")。queryStarting(atValue:startDate.timeIntervalSince1970).queryEnding(atValue:endDate.timeIntervalSince1970、childKey: "チェックアウト")。observe(.childAdded、with :(スナップショット) - >無効、 印刷(スナップショット) )} ' –