【发布时间】:2021-10-22 01:15:56
【问题描述】:
我正在使用 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()
})
我附上了以下查询的结果之一。
开始日期 = 01/01/2022
结束日期 = 01/31/2022
退货订单号:*****
退货订单# 创建日期:2021 年 1 月 19 日
【问题讨论】:
-
如果您将日期保存为字符串,它将作为字符串而不是日期进行排序和比较,此外,对于该特定格式,它将永远无法工作。如果您使用 yyyy-MM-dd 之类的格式,即 2022-01-01,则可以避免使用字符串,因为这样 2021 将在 2022 之前排序。现在 01/19 在 01/01 和 01/31 之间排序
-
问题是 Firebase 不允许存储日期
-
阅读我的全部评论
-
按字典/字母顺序(字符串的排序方式)值“01/01/2022”在“01/19/2021”之前,因为“01/01”在“01”之前/19"。解决方案是(正如 Joakim 和 Alex 所说)以允许排序的字符串格式或时间戳数字存储数据。请参阅stackoverflow.com/questions/52728669/…、stackoverflow.com/a/38226376/209103 以及来自stackoverflow.com/… 的更多信息
标签: ios swift firebase firebase-realtime-database