Swift Firebase Query



我使用Firebase查询返回日期范围内的订单。日期保存为字符串。但是,这会返回不正确的信息。

let startDate = "(selectedDateStart.startOfMonth())"
let endDate = "(selectedDateEnd.endOfMonth())"
let query = DATABASE.mainOrder.child(orderLocation).queryOrdered(byChild: "orderDate").queryStarting(atValue: startDate).queryEnding(atValue: endDate+"u{f8ff}")
query.observeSingleEvent(of: .value, with:{ (snapshot) in
if let tallies = snapshot.value as? [String:[String:Any]] {
self.allFilteredOrdersMonth = self.allFilteredOrdersMonth.merging(tallies) { (_, new) in new }
for items in tallies.keys {
print("Month Start Date Search: (startDate), End Date Search: (endDate), Order #: (items), Order # Date Created: (tallies[items]!["orderDate"]!)")
}
}
completionHandler()
})

我附上了下面一个查询的结果。

startDate = 01/01/2022

endDate = 01/31/2022

返回订单#:*****

已返回订单#创建日期:01/19/2021

如果将日期存储为以下格式的字符串:

01/01/2022

如果您尝试执行排序,请注意字符串是按字典顺序排序的

如果您想获得正确的顺序,您应该将日期存储为时间戳。

根据你的评论:

问题是Firebase不允许存储日期

它实际上做到了:

let timestamps = ["startDate": ServerValue.timestamp(), "endDate": ServerValue.timestamp()] as [String : Any]
ref.updateChildValues(timestamps) { (err, ref) in
if let err = err {
print("failed to upload user data", err)
return
}
}

最新更新