我正在研究一个评论/评论流程,并且希望能够将用户为另一个评论/评论所提供的每个评论/评论存储在Firebase中,并且同时给出的每个评论/评论都在同一时间戳下。我最初使用的是JS函数new Date()。getTime(),它可以正常工作,但是为了确保用户无法篡改值(即通过更改计算机上的日期),我想使用Firebase时间戳代替。
现在,我希望最终产品成为地图:
[chatStartTime] : {
review : stars,
time : chatStartTime
}
然后我使用transaction.set()将其合并到firebase文档中。现在的问题是ChatStartTime,它应该代表此时间戳。我有代码:
var chatStartTime = firebase.firestore.FieldValue.serverTimestamp();
顺便说一句,我也希望得到:
var chatStartTimeDate = chatStartTime.toDate();
但是chatStartTimeDate会导致错误-我的理解是这是因为chatStartTime本质上是“无效”的,直到将其添加到文档中为止。有什么办法可以解决这个问题并使用此功能?另外,如果我只对两个实例都使用chatStartTime,那么最终会在数据库上以以下形式映射:
[object Object]
review : 4.5
time :
.sv: "timestamp"
.sv是字符串类型。我该如何解决这个问题?我希望最终结果看起来像(例如)
1579194722735
review : 4.5
time : 1579194722735
答案 0 :(得分:0)
在写入时将FieldValue.serverTimestamp()
值写入服务器。因此,您无法在写入发生之前得到它。但是,您可以从响应中获取writeTime
。这应该给您您所追求的。或者,您可以在编写文档后将其读回以获取时间戳(但这似乎没有必要)。
myCollection
.doc('foo')
.create({ timestamp: FirebaseFirestore.FieldValue.serverTimestamp() })
.then(result => {
const serverTime: Date = result.writeTime.toDate();
});