使用Firebase和日期过滤器

时间:2016-09-27 18:24:16

标签: ios swift firebase firebase-realtime-database swift3

我有一个酒店预订应用程序,向用户显示可滑动的日历。现在最终目标是提供一个日历,如接口,每个保留日期下方的小点。目前,我只是试图在控制台上打印开始日期和结束日期之间的所有预约(开始日期和结束日期分别是月份的开始和结束日期)。

但是,我无法让它与Firebase一起使用。以下是Firebase上数据的显示方式:

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

这是我的Swift代码来检索数据:

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

由于数据清晰可见,数据属于第二范围,但我仍然无法显示。

这里可能有什么问题?感谢。

1 个答案:

答案 0 :(得分:3)

我尝试使用此代码并且有效:

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)
  }

您的代码和我的代码之间的区别是我更多地调用一个查询:

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

你的:

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