【问题标题】:Firebase Timestamp in cloud function not displaying time云功能中的Firebase时间戳不显示时间
【发布时间】:2020-03-09 03:34:21
【问题描述】:

我正在使用它来获取时间戳

admin.database.ServerValue.TIMESTAMP

但是在对变量进行控制台时得到这个日志

{ '.sv': 'timestamp' }

谁能帮帮我。

其实我想得到时间戳然后和数据库时间戳比较

【问题讨论】:

  • 请编辑问题以显示未按您期望的方式工作的代码。阅读这篇文章,了解如何创建用于 Stack Overflow 的优秀示例。 stackoverflow.com/help/mcve

标签: 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)

当您运行此代码时,您的日志将显示三个值:

  1. null

    这是当您使用on("value" 附加侦听器时数据库中的当前值。这里我假设test 节点还不存在,所以值是null

  2. 1573659849577

    这是客户在您执行ref.set(...) 语句时做出的估计。所以客户端估计它认为服务器时间戳可能是什么,并触发value 事件。您可以使用它来立即更新 UI,这样用户就不必等待了。

  3. 1573659859162

    这是服务器实际写入数据库的值,然后发送回客户端。这就是您要查找的实际服务器端时间戳。

理论上,客户端估计值 (2) 和服务器端值 (3) 可能相同,在这种情况下您不会得到第三个事件。但我在实践中从未见过这种情况,因为它们总是至少相差几毫秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 2020-04-08
    • 2021-10-21
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多