代码之家  ›  专栏  ›  技术社区  ›  Wings

在FireStore中按时间戳传递和筛选项目以用于swift

  •  2
  • Wings  · 技术社区  · 7 年前

    我想通过今天在消防商店的约会 Timestamp 在我的应用程序中。我今天的约会是这样的

    formatter.dateFormat = "MMMM d, yyyy"
    let result = formatter.string(from: date)
    print("Today date is \(result)")
    let startDate = result + " " + "07:00:00"
    let endDate = result + " " + "23:00:00"
    

    我必须将今天的日期从早上7点传递到下午23点,我将这些日期存储在 startDate endDate . 现在我把时间传进来了 Firestore 这样的查询:

    self.db.collection("Locations").whereField("userid", isEqualTo: "\(selectedUserID)").whereField("createddatetime", isGreaterThanOrEqualTo: "\(startDate)").whereField("createddatetime", isLessThanOrEqualTo: "\(endDate)").getDocuments()
    

    但我的快照没有任何结果。我该怎么做呢?请帮忙?

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  1
  •   maxwell    7 年前

    你需要:

    1)转换字符串->日期

    2)转换日期->时间戳(Firtimestamp)

    formatter.dateFormat = "MMMM d, yyyy HH:mm:ss"
    
    let startTime: Date = formatter.date(from: startDate) ?? Date(timeIntervalSince1970: 0)
    let startTimestamp: Timestamp = Timestamp(date: startTime)
    
    let endTime: Date = formatter.date(from: endDate) ?? Date()
    let endTimestamp: Timestamp = Timestamp(date: endTime)
    

    3)将func更改为:

    self.db.collection("Locations")
            .whereField("userid", isEqualTo: "\(selectedUserID)")
            .whereField("createddatetime", isGreaterThanOrEqualTo: startTimestamp)
            .whereField("createddatetime", isLessThanOrEqualTo: endTimestamp)
            .getDocuments() { (snapshot, error) in
    
            ...
    
    }