【问题标题】:Firebase Timestamp in cloud function not displaying time云功能中的Firebase时间戳不显示时间
【发布时间】:2020-03-09 03:34:21
【问题描述】:
我正在使用它来获取时间戳
admin.database.ServerValue.TIMESTAMP
但是在对变量进行控制台时得到这个日志
{ '.sv': 'timestamp' }
谁能帮帮我。
其实我想得到时间戳然后和数据库时间戳比较
【问题讨论】:
标签:
firebase
firebase-realtime-database
timestamp
firebase-admin
【解决方案1】:
admin.database.ServerValue.TIMESTAMP 不包含实际的服务器端时间戳,而只是一个标记(您看到的{ '.sv': 'timestamp' })。数据库服务器在写入操作时识别此标记,然后在其位置写入服务器端时间戳。
这意味着您无法在不写入数据库的情况下获取服务器端时间戳。查看如何获取此信息的简单方法是:
let ref = firebase.database().ref("test");
ref.on("value", function(snapshot) {
console.log(snapshot.val());
})
ref.set(admin.database.ServerValue.TIMESTAMP)
当您运行此代码时,您的日志将显示三个值:
-
null
这是当您使用on("value" 附加侦听器时数据库中的当前值。这里我假设test 节点还不存在,所以值是null。
-
1573659849577
这是客户在您执行ref.set(...) 语句时做出的估计。所以客户端估计它认为服务器时间戳可能是什么,并触发value 事件。您可以使用它来立即更新 UI,这样用户就不必等待了。
-
1573659859162
这是服务器实际写入数据库的值,然后发送回客户端。这就是您要查找的实际服务器端时间戳。
理论上,客户端估计值 (2) 和服务器端值 (3) 可能相同,在这种情况下您不会得到第三个事件。但我在实践中从未见过这种情况,因为它们总是至少相差几毫秒。