【问题标题】:Firebase Firestore Swift, Timestamp but server time?Firebase Firestore Swift,时间戳但服务器时间?
【发布时间】:2020-10-24 11:51:09
【问题描述】:

使用 Firestore,我添加了一个像这样的时间戳字段

    var ref: DocumentReference? = nil
    ref = Firestore.firestore()
        .collection("something")
        .addDocument(data: [
            "name": name,
            "words": words,
            "created": Timestamp(date: Date())
        ]) { ...
            let theNewId = ref!.documentID
            ...
    }

这很好,效果很好,但它并不真正正确。应该使用 Firestore 提供的“服务器时间戳”。

请注意,这是在 iOS (Swift) 和 Firestore 上,而不是 Firebase。

获取服务器时间戳的语法是什么?

【问题讨论】:

    标签: ios swift firebase google-cloud-firestore


    【解决方案1】:

    如果您想要字段值的服务器时间戳,请使用FieldValue.serverTimestamp()。这将返回一个令牌值,该值在写入完成后在服务器上得到解释。

    【讨论】:

      【解决方案2】:

      您要查找的语法是:

      "created": FieldValue.serverTimestamp()
      

      这将创建一个本身没有日期值的令牌。该值是在实际写入数据库时​​由服务器分配的,如果存在网络问题,这可能会更晚,因此请记住这一点。

      另外请记住,因为它们是标记,当您读取它们时它们可以呈现不同的值,我们可以配置它们的解释方式:

      doc.get("created", serverTimestampBehavior: .none)
      doc.get("created", serverTimestampBehavior: .previous)
      doc.get("created", serverTimestampBehavior: .estimate)
      

      none 将给你一个 nil 值,如果该值尚未由服务器设置。例如,如果您正在编写依赖延迟补偿返回的文档,您将在延迟补偿返回上获得nil,直到服务器最终执行写入。

      previous 会给你任何以前的值,如果它们存在的话。

      estimate 会给你一个值,但这将是一个估计值可能是什么。例如,如果您正在编写一个依赖延迟补偿返回的文档,estimate 将为您提供延迟补偿返回的日期值,即使服务器尚未执行写入并设置其值。

      正是由于这些原因,处理 Firestore 的时间戳可能需要您的快照侦听器处理更多返回(以更新令牌)。这些标记的 Swift 替代方法是 Unix 时间戳:

      extension Date {
          var unixTimestamp: Int {
              return Int(self.timeIntervalSince1970 * 1_000) // millisecond precision
          }
      }
      
      "created": Date().unixTimestamp
      

      这绝对是对时间戳如何工作的最佳解释(由实际发布答案的同一位 Doug Stevenson 撰写):https://medium.com/firebase-developers/the-secrets-of-firestore-fieldvalue-servertimestamp-revealed-29dd7a38a82b

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-27
        • 2021-04-19
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多