firebase.database.ServerValue.TIMESTAMP 返回一个对象

Posted

技术标签:

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

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

firebase.database.ServerValue.TIMESTAMP

然后它返回:

.sv: "timestamp"

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

【问题讨论】:

【参考方案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 解决方案适用于实时数据库。

以上是关于firebase.database.ServerValue.TIMESTAMP 返回一个对象的主要内容,如果未能解决你的问题,请参考以下文章