swift语言中云Firestore服务器时间戳的等效数据类型是啥?

Posted

技术标签:

【中文标题】swift语言中云Firestore服务器时间戳的等效数据类型是啥?【英文标题】:What is the equivalent data type of cloud Firestore server timestamp in swift language?swift语言中云Firestore服务器时间戳的等效数据类型是什么? 【发布时间】:2018-10-18 15:00:21 【问题描述】:

我有一个包含时间戳字段 createdAt 的数据模型。

struct Box 
    var title: String
    var createdAt: Timestamp

    var dictionary: [String : Any] 
        return [
            "title": title,
            "createdAt": createdAt
        ]
    

// ...

但是,我无法分配 Firestore 服务器时间戳。 swift中云Firestore服务器时间戳的等效数据类型是什么?我在这里漏掉了一点吗?

let box = Box(title: title, createdAt: FieldValue.serverTimestamp());

【问题讨论】:

服务器时间戳在客户端并没有真正有意义的“数据类型”。这适用于所有平台。它们是服务器上具有特殊含义的特殊令牌。在 android 中,您可以使用 Date 字段上的 @ServerTimestamp 注释来解决此问题以进行序列化,但我不确定 swift 是否有类似的解决方案。 @DougStevenson 这是真的。目前,到目前为止我发现的唯一解决方案是定义为var createdAt: NSObject 【参考方案1】:

当您从Firestore 读回Timestamp 时,您可以将其转换为Date 对象:

if let timestamp = data["createdAt"] as? Timestamp 
    let date = timestamp.dateValue()


/** Returns a new NSDate corresponding to this timestamp. This may lose precision. */
- (NSDate *)dateValue;

Timestamp 是一个 FIRTimestamp 对象,返回如下:

FIRTimestamp: seconds=1525802726 nanoseconds=169000000>

.dateValue()转换后:

2018-05-08 18:05:26 +0000

【讨论】:

谢谢。这可能是目前可能的解决方案。 @VahidHallaji。您是否为您的实际问题制定了解决方案。我有一个 createdAt: Timestamp? var 在 IDRequest 结构中,当我创建结构的实例时,我想将其值分配为 FieldValue.serverTimestamp 但编译器抱怨类型不匹配。接受的答案更多是关于以另一种方式返回,即将实际时间戳转换回日期对象,这不是我想要做的

以上是关于swift语言中云Firestore服务器时间戳的等效数据类型是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中使用 Firestore 为 2 人多人游戏构建数据?

如何在 Swift 上将具有自定义 ID 的文档添加到 Firebase (Firestore)

如何验证用户的时间是否正确,并且没有在Swift 5中欺骗应用程序?

Firebase Firestore + Cloud Function 服务器端验证应用内购买收据(Swift + NodeJS)

Firebase Firestore +云功能服务器端验证应用内购买收据(Swift + NodeJS)

如何在 Firestore Objective-c 上设置/更新数据时以秒为单位获取 Firebase 服务器时间?