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_added
、child_changed
或value
事件等),您将看到实际的时间戳值。
在文档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 返回一个对象的主要内容,如果未能解决你的问题,请参考以下文章