【发布时间】:2020-09-22 22:12:26
【问题描述】:
我正在尝试从我的 Firestore 数据库中读取时间戳并最终将其转换为日期,但由于某种原因,我的代码似乎没有返回任何内容。相反,它似乎只使用了我提供的默认值,即 0,因此它始终读取为 1970 年 1 月 1 日。
我试图在 Firestore 中阅读的文档包含一个名为 date 的字段,该字段具有一种时间戳。文档中还有其他字段,但为了简单起见,我已将这些字段排除在此问题之外。作为参考,文档中的其他字段已成功读取。
我试过下面的代码。请注意,我已将 Firebase 导入该类:
surveyDataCollectionRef.whereField("uid", isEqualTo: Auth.auth().currentUser?.uid ?? "").getDocuments { (snapshot, error) in
if let err = error {
debugPrint("Error fetching docs: \(err)")
} else {
guard let snap = snapshot else { return }
for document in snap.documents {
let data = document.data()
let timestamp = data["date"] as? TimeInterval ?? 0
let date = Date(timeIntervalSince1970: timestamp)
dateFormatter.timeZone = TimeZone(abbreviation: "GMT")
dateFormatter.locale = NSLocale.current
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm"
let strDate = dateFormatter.string(from: date)
let newSurvey = Survey(date: strDate)
self.surveys.append(newSurvey!)
self.currentSurveys = self.surveys
}
self.tableView.reloadData()
}
}
}
【问题讨论】:
-
请编辑问题以显示您希望收到的文档数据。在不知道该文件中实际内容的情况下,我们无话可说。如果您的文档没有名为“日期”的字段,这可能会解释这种行为。
-
感谢您的建议。我用额外的信息更新了这个问题。该文档确实有一个名为“日期”的字段,所以似乎不是这样。当我打印到控制台时,我实际上也收到了时间戳......
-
我建议将所有的调试信息添加到问题中,以便我们观察您观察到的内容。问题中应该有足够的信息,以便任何人都可以重现该问题。请阅读:stackoverflow.com/help/minimal-reproducible-example
-
date是原生 Firestore 时间戳还是数字?因为您在客户端处理日期的方式表明您需要一个 Unix 时间戳(整数)。
标签: swift firebase google-cloud-firestore timestamp