我想從Firebase節點查詢活動項目。活動項目由開始日期和結束分隔。
下面是結構的一個示例:如何在Firebase上查詢包含時間戳的項目?
{
"items" : {
"itme1" : {
"data" : "...", //some data
"startDate" : 12345678,
"endDate" : 23456789
},
"item2" : {...}
}
}
日期是火力地堡時間戳,以防止用戶時移。
//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])
}
})
我如何查詢火力地堡獲得的物品,其中endDate >= FIRServerValue.timestamp()
(主動項):
一個項目這樣就節省火力地堡的服務器上?
由於Firebase時間戳FIRServerValue.timestamp()
只能在Firebase上寫入後才能知道,因此我無法直接查詢FIRServerValue.timestamp()
。 也許有更好的方法來設置endDate。人們如何處理這個問題?
你無法在endDate上查詢的原因startingAtValue(currentTimeStamp)?這將返回endDate大於當前時間的所有節點。也許我不完全理解這個問題?您是否總是希望將當前時間戳寫入開始日期,並且結束日期總是在一小時後? – Jay
我可以查詢'endDate startingAtValue(currentTimeStamp)',但爲了得到currentTimeStamp我需要在Firebase上第一次保存'FIRServerValue.timestamp()'以獲得當前值。這將是一個耗費資源的查詢,所以也許有另一種解決時間戳的方法。 – Bogy
是的,我總是想保存當前時間戳,因爲開始日期和結束日期可能會有所不同(1小時或更長時間)。 – Bogy