【问题标题】:firebase.database.ServerValue.TIMESTAMP return an Objectfirebase.database.ServerValue.TIMESTAMP 返回一个对象
【发布时间】:2017-03-06 00:07:12
【问题描述】:

我正在使用 Firebase 开发一个网络项目。 我打电话:

firebase.database.ServerValue.TIMESTAMP

然后它返回:

{.sv: "timestamp"}

如何使用 javascript 获取 Firebase 服务器的时间?

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    预计您将在写入 Firebase 数据库的数据中使用 firebase.database.ServerValue.TIMESTAMP。它是服务器上实际时间的占位符,将在服务器接收和写入数据时被替换。

    当您从数据库读取数据或您的任何侦听器可能已配置触发时(对于child_addedchild_changedvalue 事件等),您将看到实际的时间戳值。

    在文档here中有解释:

    {TIMESTAMP: non-null Object}
    

    由 Firebase 服务器确定的用于自动填充当前时间戳(自 Unix 纪元以来的时间,以毫秒为单位)的占位符值。

    【讨论】:

      【解决方案2】:

      Firebase documentation 中的这个 sn-p 显示了如何设置时间戳:

      var userLastOnlineRef = firebase.database().ref("users/joe/lastOnline");
      userLastOnlineRef.onDisconnect().set(firebase.database.ServerValue.TIMESTAMP);
      

      要让代码中的值也可用,您需要监听该值:

      userLastOnlineRef.on('value', function(snapshot) {
          console.log(snapshot.val());
      });
      

      您将看到 value 事件触发两次(在设置值的设备上):一次用于初始客户端估计时间戳,一次用于来自服务器的实际值。

      【讨论】:

        【解决方案3】:

        只是为了添加更多来自@cartant 的回答:

        admin.database.ServerValue.TIMESTAMP 返回一个非空对象,并且是一个占位符 值,用于自动填充当前时间戳。 它不包含实际的时间戳。数据库将在执行命令时替换此占位符。

        当您在 database.ref 内部使用它时,它会按预期工作,但在它外部只是一个无用的对象。

        请参阅此SO Answer 了解更多信息。

        【讨论】:

        • 如果我想将其作为响应的一部分返回,我如何获得实际值?
        【解决方案4】:

        这是我必须做的:

        firebase.firestore.FieldValue.serverTimestamp()
        

        来源:

        https://firebase.google.com/docs/reference/js/firebase.firestore.FieldValue

        【讨论】:

        • 这个对我有用,其他解决方案没有。
        • 使用 firestore 时,这是解决方案。 database.ServerValue.TIMESTAMP 解决方案适用于实时数据库。
        猜你喜欢
        • 2015-06-06
        • 2015-06-03
        • 2014-05-27
        • 2014-05-22
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        • 2010-10-22
        • 2017-12-03
        相关资源
        最近更新 更多