【问题标题】:How to parse Firestore FieldValue to Date in Swift如何在 Swift 中将 Firestore FieldValue 解析为日期
【发布时间】: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

【问题讨论】:

    标签: swift firebase google-cloud-firestore


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 2018-02-27
    • 1970-01-01
    相关资源
    最近更新 更多