为什么 servertimestamp 和 Firestore 中的 js new Date() 有区别?

Why is there a difference between servertimestamp and the js new Date() in Firestore?

在向 Firestore 写入文档时,我经常看到 serverTimestamp() sentinel 和 new Date() 对象之间的差异不为零。

差异在 秒到 几十 分钟之间。

他们不是在做同样的事情吗?

Cloud Functions 中示例的代码

docRef.set({
  'date-timestamp': new Date(),
  'server-timestamp': admin.firestore.FieldValue.serverTimestamp(),
}).catch(console.error);

他们做的事情不一样。

serverTimestamp() 转换为 Google 服务器计算的日期,即服务器收到文档写入的时间。

new Date() 生成创建日期对象时客户端计算的日期,不考虑任何其他因素。

显然,在您的示例中,客户端和服务器之间的时间计算是不同的。总会有一些差异,因为客户端和服务器之间存在无法避免的延迟。