如何在Firebase上查询带有时间戳的项目?

时间:2016-10-26 17:41:24

标签: swift firebase firebase-realtime-database

我想查询Firebase节点中的活动项。活动项目由开始日期和结束分隔 以下是结构示例:

{
    "items" : {
        "itme1" : {
            "data" : "...", //some data
            "startDate" : 12345678,
            "endDate" : 23456789
        },
        "item2" : {...}
    }
} 

日期是Firebase时间戳,以防止用户时移 项目保存在Firebase服务器上,如下所示:

//Init data to save
var dictionary = Dictionary<String,Any>()
dictionary["data"] = "some data"
dictionary["startDate"] = FIRServerValue.timestamp()

//Save data on Firebase
let itemRef = FIRDatabase.database().reference(withPath: "items").childByAutoId()
itemRef.setValue(dictionary)

//Set end date
itemRef.observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in
    if let dict = snapshot.value as? NSDictionary, let createdAt = dict["startDate"] as? TimeInterval {
        let startDate = Date(firebaseTimestamp: createdAt)
        let endDate = startDate.dateByAddingHours(1) //Add one hour to startDate
        itemRef.updateChildValues(["endDate":endDate.timeIntervalSince1970 * 1000])
    }
})

如何查询Firebase以获取endDate >= FIRServerValue.timestamp()(有效项目)的项目?

由于firebase时间戳FIRServerValue.timestamp()只有在Firebase上写入后才能知道,我无法直接查询FIRServerValue.timestamp()。 也许有更好的方法来设置endDate。人们如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情。这只会查询结束日期等于或等于当前日期的项目。

let removeBeforeThisDate = NSDate()
let currentDateTimestamp = removeBeforeThisDate.timeIntervalSince1970

itemRef.queryOrderedByChild("endDate").queryStartingAtValue(currentDateTimestamp).observeEventType(.Value, withBlock: { snapshot in
...