admin.firestore.Timestamp.now() 和 admin.firestore.FieldValue.serverTimestamp() 有什么区别?

The*_*mer 2 javascript node.js firebase google-cloud-firestore

https://firebase.google.com/docs/reference/js/firebase.firestore.FieldValue.html#servertimestamp

https://firebase.google.com/docs/reference/js/firebase.firestore.Timestamp.html#now

我不确定我是否理解其中的区别。有人可以解释一下吗?

也就是说:如果我只是使用 firebase.firestore.Timestamp.now() 作为我将要写入的对象的时间戳属性而不是 firebase.firestore.FieldValue.servertimestamp() ,我会得到什么区别?

我想有一些精度增益?多少 ?或者是别的什么 ?

Dou*_*son 6

Timestamp.now() 使用客户端机器的时钟生成时间戳,这可能是错误的,甚至是完全错误的。

FieldValue.serverTimestamp()将令牌编码到文档字段中,每当收到写入操作时(不是在从客户端发出时),该字段就会使用 Google 服务器上的时钟转换为时间戳。无论恶意用户做什么,所有 Google 服务的时钟时间都经过精心保证是正确的。

如果您绝对需要正确的时间,尤其是需要使用request.time安全规则检查的时间,则应使用服务器时间戳。如果您需要客户端的时钟时间,请使用. 几乎总是首选服务器时间戳。Timestamp.now()

  • @DougStevenson我在与“FieldValue.arrayUnion()”结合使用“FieldValue.serverTimestamp()”时遇到了问题。我不确定这应该是功能请求还是错误报告,但基本上我可以使用 `Timestamp.now()` 作为字段使用 arrayUnion() 将对象添加到现有数组中,但使用 serverTimestamp() 会引发错误)。您知道我应该通过哪个渠道表达这种担忧吗? (2认同)