Firebaseノードからアクティブなアイテムを照会します。アクティブな項目は、開始日と終了日で区切られます。ここ
は、構造体のサンプルである: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])
}
})
どのように私はどこendDate >= FIRServerValue.timestamp()
(アクティブ項目)の項目を取得するためにFirebaseを照会することができますか?
firebaseタイムスタンプFIRServerValue.timestamp()
はFirebaseで書かれた後でしか知ることができません。FIRServerValue.timestamp()
に直接問い合わせることはできません。 おそらく、endDateを設定するより良い方法があります。人々はこれをどのように扱うのですか?
endDateのstartingAtValue(currentTimeStamp)で照会できない理由は何ですか?これは、endDateがcurrentTimeより大きいすべてのノードを返します。多分私はその質問を完全に理解していないでしょうか?常に現在のタイムスタンプを開始日として書きますが、終了日は常に1時間後になりますか? – Jay
'endDate startingAtValue(currentTimeStamp)'を問い合わせることはできますが、currentTimeStampを取得するには現在の値を取得するには、最初にfirebaseに 'FIRServerValue.timestamp()'を保存する必要があります。これはリソースを消費するクエリになるため、おそらくタイムスタンプを処理する別の解決策があります。 – Bogy
そして、私はいつも、開始日と終了日が変わる(1時間以上)ので、現在の時間を保存したいと思っています。 – Bogy