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

相关问题