繁体   English   中英

如何读取 Swift 中的 Firestore 时间戳

[英]How to read a Firestore timestamp in Swift

我正在尝试从我的 Firestore 数据库中读取时间戳并最终将其转换为日期,但出于某种原因我的代码似乎没有返回任何内容。 相反,它似乎只使用我提供的默认值,即 0,因此它始终显示为 1970 年 1 月 1 日。

我试图在 Firestore 中阅读的文档包含一个名为日期的字段,它具有一种时间戳类型。 文档中还有其他字段,但为了简单起见,我将这些字段排除在这个问题之外。 作为参考,文档中的其他字段已成功读取。

我试过下面的代码。 请注意,我已将 Firebase 导入到 class:

   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()
            }
        }
    }

经过更多的试验和错误后,我发现下面的代码似乎能够让我得到一个日期作为字符串值(并且采用我想要的正确格式:

if let timestamp = data["date"] as? Timestamp {
    let date = timestamp.dateValue()
    dateFormatter.dateStyle = .medium
    dateFormatter.timeStyle = .none
    strDate = "\(dateFormatter.string(from: date))"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM