【问题标题】:Swift Firebase Query [duplicate]Swift Firebase 查询 [重复]
【发布时间】: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


【解决方案1】:

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

01/01/2022

你尝试执行一个命令,请注意字符串是有序的lexicographically

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

根据您的评论:

问题是 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
    }

}

【讨论】:

  • 所以我可以这样做吗? db.child("orderDate").setValue(ServerValue.timestamp())
  • 您应该使用允许您执行更新的数据结构。您是否尝试过我的答案中的解决方案?有用吗?
  • 嘿,威尔。我可以帮助您了解其他信息吗?如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我真的很感激。谢谢!
猜你喜欢
  • 2018-01-25
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 2018-04-01
相关资源
最近更新 更多