我正在使用它来获取时间戳
admin.database.ServerValue.TIMESTAMP
但是在日志中,通过控制台变量获取该信息
{ '.sv': 'timestamp' }
任何人都可以帮助我。
实际上我想获取时间戳,然后将其与数据库时间戳进行比较
答案 0 :(得分:2)
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)可能相同,在这种情况下,您将不会获得第三个事件。但实际上我从未见过,因为它们总是至少相隔几毫秒。