如何在 Swift 中将 Firestore FieldValue 解析为日期
Posted
技术标签:
【中文标题】如何在 Swift 中将 Firestore FieldValue 解析为日期【英文标题】:How to parse Firestore FieldValue to Date in Swift 【发布时间】:2018-11-26 04:31:12 【问题描述】:我将文档存储在 Cloud Firestore 数据库的集合中。在本文档中,我想要参考文档的存储时间,因此我使用 Firestore 的 FieldValue 对象,该对象具有 serverTimeStamp()
函数。
我无法将客户端上的此 FieldValue 对象解析为 Date/NSDate
或 String
。我花了一些时间阅读 Firestore ios 文档,但找不到任何线索。
将FieldValue
从数据库获取到客户端没有问题,但是,我无法将FieldValue
类型的时间戳转换/转换为任何内容。
尝试转换为字符串和日期:
let timeStampString : String = message.timeStamp
let timeStampDate = Date(timeIntervalSince1970: message.timeStamp)
FieldValue
类型的值分配给String
类型
无法将FieldValue
类型的值转换为预期的参数类型TimeInterval
(又名Double
)
编辑:查看 Doug Stevenson 的回答后,处理此问题的最佳方法是在阅读客户端信息时将您的 timeStamp 值转换为 TimeStamp(而不是 FieldValue)。
let timeStamp = document["yourTimeStampKey"] as! TimeStamp
而不是
let timeStamp = document["yourTimeStampKey"] as! FieldValue
【问题讨论】:
【参考方案1】:不需要解析。 Firestore 时间戳字段的类型为 Timestamp,您应该直接使用它。它代表了一个纳秒级精度的时间点。
代码:
let timeStamp = document["yourTimeStampKey"] as! TimeStamp
而不是
let timeStamp = document["yourTimeStampKey"] as! FieldValue
【讨论】:
我不明白。当在客户端检索值时,我通过执行类似 document["timeStamp"] 的操作将时间戳存储为 FieldValue?字段值。你如何从 FieldValue 到 TimeStamp?您是否建议将 document["timeStamp"] 转换为 TimeStamp 而不是 FieldValue? 您不应该从查询中获取任何类型的 FieldValue。 FieldValue 类型的值只有两个,写数据的时候用到。您不能将 serverTimestamp() 标记放入文档中,然后将其作为时间戳重新取出。发生文档写入时,会在服务器上计算时间戳。 我在尝试从 Firestore 检索时间戳时不断收到空值,有什么想法吗? 斯威夫特 5TimeStamp
-> Timestamp
请查看答案:***.com/a/56662889/2781088以上是关于如何在 Swift 中将 Firestore FieldValue 解析为日期的主要内容,如果未能解决你的问题,请参考以下文章
无法在getDocuments querysnapshot(Swift)中将变量分配给Firebase数据[重复]
获取喜欢帖子 Swift 和 Firestore 的用户列表
将 Firebase Firestore 时间戳转换为日期(Swift)?