我在Firestore集合中具有此文档结构
{ message: 'hello world', time: 1538398128 }
使用此功能发布消息时,客户端设置时间值
moment().unix()
问题是我的客户有不同的时间,如果我按时间对文档进行排序,就像这个示例一样,则不一致
{ message: 'aaa', time: 1538398317 } // client 1 post at 14.00:00
{ message: 'bbb', time: 1538398257 } // client 2 post at 14:00:10
在客户端上,我在“ aaa”之前看到“ bbb”。 我该如何解决这个问题? 我知道存在firebase.firestore.FieldValue.serverTimestamp(),但是只有在发布文档后,它才能为我提供值,我无法在客户端上使用它。 谢谢
答案 0 :(得分:0)
那么您将需要选择一个时区并将其用作标准的一致数据存储,否则每个客户端都将使用本地时区。您可能想使用momentjs的扩展名moment-timezone
,在其中可以指定要使用的时区:https://momentjs.com/timezone/
答案 1 :(得分:0)
不可能随时间完美地同步不同的客户端设备(电话/浏览器),因为您没有机制来强制它们的时钟同步。
为确保顺序一致,您将需要使用firebase.firestore.FieldValue.serverTimestamp()
,一旦提交,它将返回给客户端。等待期间,可以将客户端时间用作后备机制。更好的是,您可以联系某个时间服务器以验证本地时钟距离可用时钟没有太远。