我想查询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。人们如何处理这个问题?
答案 0 :(得分:0)
你可以尝试这样的事情。这只会查询结束日期等于或等于当前日期的项目。
let removeBeforeThisDate = NSDate()
let currentDateTimestamp = removeBeforeThisDate.timeIntervalSince1970
itemRef.queryOrderedByChild("endDate").queryStartingAtValue(currentDateTimestamp).observeEventType(.Value, withBlock: { snapshot in
...