簡體   English   中英

使用 Firebase 的服務器時間戳

[英]Server timestamp using firebase

我正在研究評論/評論過程,並希望能夠將用戶給出的每條評論/評論存儲在 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

FieldValue.serverTimestamp()值在寫入時寫入服務器。 所以你不能在寫發生之前得到它。 但是,您可以從響應中獲取writeTime 這應該給你你所追求的。 或者,您可以在寫入文檔以獲取時間戳后將其讀回(但這似乎沒有必要)。

myCollection
    .doc('foo')
    .create({ timestamp: FirebaseFirestore.FieldValue.serverTimestamp() })
    .then(result => {
      const serverTime: Date = result.writeTime.toDate();
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM