我知道你可以在web、ios和android中提取服务器时间戳--但是Firebase的新云功能呢?我不知道如何在那里获取服务器时间戳?用例是我想在电子邮件到达时添加时间戳。
在Web上,它是Firebase.数据库.服务器值.时间戳
但是在功能节点服务器接口中似乎没有这个功能?
我想已经很晚了,我可能没有抓住重点...
编辑
我是这样初始化的
admin.initializeApp(functions.config().firebase);
const fb = admin.database()
那就叫这个...
Firebase.database.ServerValue.TIMESTAMP
但是,这是从客户端集成。在函数,Firebase是不是这样初始化。我已经尝试
admin.database().ServerValue.TIMESTAMP
以及
fb.ServerValue.TIMESTAMP
9条答案
按热度按时间5fjcxozz1#
由于您已经在使用admin SDK,因此正确的语法为:
iecba09b2#
如果您使用Firebase Admin SDK,正确语法如下(检查日期:2019 - 08 - 27):
(2021年至2022年)
nkoocmlb3#
只是为了向未来的读者澄清:
admin.database.ServerValue.TIMESTAMP
返回一个non-null Object
,它是一个用于自动填充当前时间戳的占位符值。它不包含实际时间戳。数据库将在执行命令时替换此占位符。如果您在
database.ref
中使用它,那么它的工作方式与您预期的一样,并且是输入时间戳的首选方式:但是如果你试图在数据库函数之外使用它(例如返回现在的时间或进行一些计算),它将返回一个你不能使用的对象:
更多信息请参见firebase.database.ServerValue和本SO question。
如果您想将
Date.now()
用于计算或任何其他一般用途,那么Date.now()
在database
函数之外也能很好地工作。两者都使用
unix time
,unix time
是自1970年1月1日星期四00:00:00协调世界时(UTC)以来经过的秒数,与时区无关。它在客户端和服务器上是相同的数字(...或几乎是:-)。h9a6wy2h4#
我自己是node.js新手,但是Date.now()在我的测试中工作正常。
我误解了您的问题--没有意识到您想要对存储在Firebase数据库中的数据添加时间戳。我以为您只是想要获取运行云功能的服务器上的时间。如果您想要对存储在Firebase数据库中的已接收电子邮件添加时间戳,那么使用
admin.database.ServerValue.TIMESTAMP
无疑是最佳方法。我写了下面的函数来比较时间。我希望云函数服务器和数据库服务器上的时间同步到一个非常精确的时间参考。当我运行这个函数时,数据库时间戳通常在
Date.now()
值的一百毫秒以内。数据库时间戳稍晚一点是合理的。假定云函数花费一些时间来连接到数据库并执行写入。jdgnovmf5#
取决于使用情形
用例1
你想设置文档域到服务器时间戳
示例可以是
serverTimestamp
返回一个非空对象,是用于自动填充当前时间戳的占位符值。它不包含实际时间戳。数据库将在执行命令时替换此占位符 *@return在set()、create()或update()调用中使用的字段值标记。*
用例2
你想使用服务器时间戳为你的函数逻辑
为此你可能会想做一些
admin.firestore.Timestamp.now()
或admin.firestore.Timestamp.fromDate(new Date())
良好读数:https://bigcodenerd.org/firebase-server-timestamp-cloud-functions/
6bc51xsx6#
在客户端上等效于Timestamp.now()的cloud函数中使用以下代码,将返回当前时间戳
但是如果你想从Date对象初始化Timestamp,你可以按如下方式操作
如果你想为将来或过去的日期初始化时间戳,那么首先通过解析字符串或设置你想设置的时间来初始化Date对象,并将其传递给Timestamp.fromDate()
ejk8hzay7#
在2020年8月16日的文件中。
https://cloud.google.com/firestore/docs/manage-data/add-data#server_timestamp
下面是我在代码中的用法:
vmpqdwk38#
您可以尝试:
常量时间戳= www.example.com();admin.firestore.Timestamp.now();
plupiseo9#