- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Firestore 作为数据库,现在我想在用户注册时存储服务器时间戳。此题与Android相反
FieldValue.serverTimestamp()
这是模型类
struct NotificationModel: Identifiable, Codable {
var id: String? = nil
var title: String?
var body: String?
var timestamp: Date?
init(title: String, body: String, timestamp: Date) {
self.title = title
self.body = body
self.timestamp = timestamp
}
}
我想在我的模型类中使用这个时间戳。
我怎样才能实现这样的目标?
.document(ID).collection("notifications").order(by: "timestamp", descending: true).addSnapshotListener { (snapshot, error) in
这是我从 Firestore
到 Json 的解码
文档的完整代码
func readUserNotifications<T: Decodable>(from collectionReference: FIRCollectionReference, get userId: String, returning objectType: T.Type, fromType collectionCell: FIRCollectionCell, completion: @escaping ([T], _ sucess: Bool) -> Void) {
collectionReferences(to: collectionReference).document(userId).collection("notifications").order(by: "timestamp", descending: true).addSnapshotListener { (snapshot, error) in
var objectsAppend = [T]()
if let error = error {
print(error.localizedDescription)
}
guard let snapshot = snapshot else {
print("Doesn't have snapshot")
return
}
do {
for document in snapshot.documents {
//print(try document.decode(as: NotificationModel.self))
let object = try document.decode(as: objectType.self, includingId: true)
objectsAppend.append(object)
}
if objectsAppend.isEmpty {
objectsAppend.removeAll()
completion(objectsAppend, false)
} else {
completion(objectsAppend, true)
}
} catch {
print(error)
}
}
}
这是我的解码
函数,那里有错误
extension DocumentSnapshot {
func decode<T: Decodable>(as objectType: T.Type, includingId: Bool = true) throws -> T {
var documentJson = data()
if includingId {
documentJson["id"] = documentID
}
let documentData = try JSONSerialization.data(withJSONObject: documentJson, options: [])
let decodedObject = try JSONDecoder().decode(objectType, from: documentData)
return decodedObject
}
最佳答案
试试这个:假设我们有一个 Firestore 结构(如 Firestore 控制台所示)
timestamps
stamp_0
stamp: September 18, 2018 at 8:00:00 AM UTC-4
stamp_1
stamp: September 18, 2018 at 8:01:00 AM UTC-4
stamp_2
stamp: September 18, 2018 at 8:02:00 AM UTC-4
我们想要读取时间戳并将 key 和格式化的时间戳打印到控制台。
self.db.collection("timestamps").getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
if let stamp = document.get("stamp") {
let title = document.documentID
let ts = stamp as! Timestamp
let aDate = ts.dateValue()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"
let formattedTimeZoneStr = formatter.string(from: aDate)
print(title, formattedTimeZoneStr)
}
}
}
}
输出是
stamp_0 2018-09-18 08:00:00 -0400
stamp_1 2018-09-18 08:01:00 -0400
stamp_2 2018-09-18 08:02:00 -0400
这就是您获取时间戳数据的方式。
将它存储在您的模型类中可以通过多种方式完成,具体取决于您要使用它做什么:它可以存储为格式化的时间戳字符串(如我的回答所示),或 Firestore Timestamp 对象或日期 (NSDate) 对象。仅取决于您的用例。
关于ios - 如何在 iOS 中使用 FieldValue.serverTimestamp() 作为模型类 - swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52371992/
根据Firebase文档,我们不应该使用增量值,因为它可能会导致热点。我有多个子集合,并且我只对对子集合进行排序感兴趣,所以我希望将服务器端时间戳与文档ID(它表示我的子集合所在的文档)连接在一起。但
我有以下功能 Future _updateDocument(String path, {Map data}) async { final Map stampedData = {'updat
有没有办法在不使用云函数的情况下将时间添加到服务器时间戳? 我想要的是从面板更新时间戳,并让用户端检查时间戳是否大于当前时间。我还希望面板用户能够设置要添加的时间量,因此在用户端执行逻辑不是最佳解决方
在我的 Typescript 应用程序代码中,我定义了一个模型,该模型使用 Firestore 在服务器上生成的时间戳。当文档从数据库返回时,该字段将是一个 ISO 字符串。我想在我的整个应用程序中使
火力基地服务器时间戳 例如,对由firebase服务器生成的每个国家/地区应用相同的时间 session ...如果应用程序受一个国家/地区控制,那么服务器是否会应用该国家/地区的时间戳? 最佳答案
我正在 firestore 中构建一个实时聊天应用程序,我目前在读回消息时间戳时遇到问题。我正在使用 onSnapshot 监听器从我的消息集合中获取更新,但是我发现我在最新的时间戳上收到未定义的错误
我的 Firestore 数据库中有一个时间戳字段,格式如下:Quarta-feira, 11 de Outubro de 2017 às 10:24:54 GMT-03:00 定义为:map.p
我正在学习教程,代码中使用 firebase.firestore.FieldValue.serverTimestamp() 将 timestamp 属性设置为服务器时间戳。 import fireba
async createUser(uid: string, email: string) { await this.afs.doc(FirestoreDbConstant.USER_PROFI
我正在使用 TypeScript 在 Firebase 中为我的文档定义数据模型。创建文档时,createdOn字段将是服务器时间戳,否则它是一个日期。例如... export interface P
我需要有关此 Firebase 规则的帮助,我有一个存储时间戳的 child 而且我只需要在服务器时间戳小于存储在 Date->date 子节点上的时间戳时允许写入 firebase 的另一个位置。我
我想在 google cloud firestore 中创建一个查询来检索过去 10 小时内创建的数据,但我想使用服务器日期作为帐户的基础。 类似于: this.afs.collection("pos
我的 flutter 应用程序需要获取当前时间,我已经为此尝试了几个包,例如:truetime、ntptime、datetime 的 datetime、cloud firestore 的 Timest
刚好遇到这 block firebase doc在 firebase.firestore.SnapshotOptions 上: serverTimestamps serverTimestamps: "
我正在从 Cloud Firestore 读取一些数据(消息),并且在文档中我有一个 timestamp时间字段。 我有一个流: Stream get chats { return chatC
我找不到从 firestore 获取 serverTimestamp 的方法。无论是使用 firestore 本身,还是使用 angularfire。 我发现很多 github 问题都有解决方案,但不
我使用 Firestore 作为数据库,现在我想在用户注册时存储服务器时间戳。 来自 Firestore 文档 Map updates = new HashMap<>(); updates.p
如何检查客户端用户是否仅使用 firebase.firestore.FieldValue.serverTimestamp() 创建文档? 我有以下内容: allow create: if reques
这是我的模型类: import com.google.firebase.firestore.ServerTimestamp; import java.util.Date; public
firestore.FieldValue.serverTimestamp 与使用 Date.now()(从中央服务器)之间是否存在任何性能或功能差异? 最佳答案 如果您将客户端的 Date.now()
我是一名优秀的程序员,十分优秀!