在 Firestore for Swift 中按时间戳传递和过滤项目

Win*_*ngs 4 ios firebase swift google-cloud-firestore

我试图Timestamp在我的应用程序中通过 Firestore中的今天日期。我得到今天的日期是这样的

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"
Run Code Online (Sandbox Code Playgroud)

我必须从早上 7 点到下午 23:00 传递今天的日期,并将这些日期存储在startDate和 中endDate。现在我在这样的Firestore查询中传递这些时间:-

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

但我的快照没有得到任何结果。我怎样才能做到这一点。请帮忙?

在此处输入图片说明

max*_*ell 6

你需要:

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)
Run Code Online (Sandbox Code Playgroud)

3) 将 func 更改为:

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

        ...

}
Run Code Online (Sandbox Code Playgroud)