14

我知道你可以在web,ios和android中獲取服務器時間戳 - 但是Firebase的新雲端函數呢?我無法弄清楚如何獲得服務器時間戳?用例是我想在郵件到達時給它加上時間戳。如何獲取Firebase雲服務中的服務器時間戳?

在網頁是Firebase.database.ServerValue.TIMESTAMP

但是,這似乎並沒有在功能節點服務器接口可用?

我認爲它是晚,我可以在這裏失去了點...

編輯

我初始化這樣

admin.initializeApp(functions.config().firebase); 
const fb = admin.database() 

然後,它被稱爲是這樣的。

Firebase.database.ServerValue.TIMESTAMP 

但是,這是從客戶端集成。在函數上,Firebase不會像這樣初始化。我試過

admin.database().ServerValue.TIMESTAMP 

fb.ServerValue.TIMESTAMP 
+0

據我所知'ServerValue.TIMESTAMP'同樣適用於Firebase的Cloud Functions。你能分享[重現問題的最小代碼](http://stackoverflow.com/help/mcve)嗎? –

+0

嗨@FrankvanPuffelen - 我用我的初始化和不工作的例子編輯了原文。 –

回答

38

既然你已經在使用管理員SDK,正確的語法是:

admin.database.ServerValue.TIMESTAMP 
+0

這是我正在尋找的簡單答案 - 謝謝@ frank-van-puffen –

+0

如何以毫秒爲單位打印時間戳? admin.database.ServerValue.TIMESTAMP返回一個對象{'.sv':'timestamp'},我相信這是一個佔位符 –

+0

它*確實是一個佔位符。要獲取實際值,請聽取您寫入的位置。 –

7

我是新來的Node.js自己,但Date.now()作品在我的測試。

編輯

我誤解你的問題 - didn't實現你想時間戳你存儲在火力地堡數據庫中的數據。我以爲你只是想在運行雲功能的服務器上獲得時間。如果您想要將收到的電子郵件時間戳記存儲在Firebase數據庫中,那麼使用admin.database.ServerValue.TIMESTAMP毫無疑問是最佳方法。

只是爲了我自己的教育,我寫了下面的函數來看看時代是如何比較的。我期望雲功能服務器和數據庫服務器上的時間同步到一個非常準確的時間參考。當我運行此函數時,數據庫時間戳通常在Date.now()值的一百毫秒內。稍後的數據庫時間戳是合理的,因爲它需要一段時間才能連接到數據庫並執行寫操作。

exports.timeTest = functions.database.ref('/test/trigger') 
    .onWrite(event => { 

     const now= Date.now(); 
     console.log('now=', now); 

     const timeVals = { 
      dateNow : now, 
      serverTimestamp : admin.database.ServerValue.TIMESTAMP 
     }; 

     return event.data.ref.parent.child('times').update(timeVals); 
    }); 
+0

並且Date.now()獲取節點服務器時間,還是從客戶端計算機執行計算的時間?還是它使用一些標準化的時鐘?如果我將計算機時間設置爲一次,則執行Date.now(),然後將其設置爲不同的時間並執行Date。現在()我會得到兩個不同的結果嗎? –

+0

@JustinHandley:更新了我的答案。 'Date.now()'是服務器運行雲功能的時間。它完全獨立於任何客戶端計算機上的時間。 –

5

如果使用火力地堡管理SDK,這裏是正確的語法(經過2017年12月7日) :

const admin = require('firebase-admin'); 

// Using Cloud Firestore 
admin.firestore.FieldValue.serverTimestamp() 

// Using Realtime Database 
admin.database.ServerValue.TIMESTAMP 
+0

像魅力一樣工作:-)謝謝。 – Qorbani

相關問題