如何在 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/NSDateString。我花了一些时间阅读 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 检索时间戳时不断收到空值,有什么想法吗? 斯威夫特 5 TimeStamp -> Timestamp 请查看答案:***.com/a/56662889/2781088

以上是关于如何在 Swift 中将 Firestore FieldValue 解析为日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 5 中将文档转换为自定义对象?

无法在getDocuments querysnapshot(Swift)中将变量分配给Firebase数据[重复]

获取喜欢帖子 Swift 和 Firestore 的用户列表

将 Firebase Firestore 时间戳转换为日期(Swift)?

如何在firestore 9中将具有自定义ID的文档添加到firestore

如何在 Kotlin 中将 Firestore 日期/时间戳转换为日期?