我使用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
}
}