【发布时间】:2017-03-06 00:07:12
【问题描述】:
我正在使用 Firebase 开发一个网络项目。 我打电话:
firebase.database.ServerValue.TIMESTAMP
然后它返回:
{.sv: "timestamp"}
如何使用 javascript 获取 Firebase 服务器的时间?
【问题讨论】:
标签: javascript firebase firebase-realtime-database
我正在使用 Firebase 开发一个网络项目。 我打电话:
firebase.database.ServerValue.TIMESTAMP
然后它返回:
{.sv: "timestamp"}
如何使用 javascript 获取 Firebase 服务器的时间?
【问题讨论】:
标签: javascript firebase firebase-realtime-database
预计您将在写入 Firebase 数据库的数据中使用 firebase.database.ServerValue.TIMESTAMP。它是服务器上实际时间的占位符,将在服务器接收和写入数据时被替换。
当您从数据库读取数据或您的任何侦听器可能已配置触发时(对于child_added、child_changed 或value 事件等),您将看到实际的时间戳值。
在文档here中有解释:
{TIMESTAMP: non-null Object}由 Firebase 服务器确定的用于自动填充当前时间戳(自 Unix 纪元以来的时间,以毫秒为单位)的占位符值。
【讨论】:
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 事件触发两次(在设置值的设备上):一次用于初始客户端估计时间戳,一次用于来自服务器的实际值。
【讨论】:
只是为了添加更多来自@cartant 的回答:
admin.database.ServerValue.TIMESTAMP 返回一个非空对象,并且是一个占位符 值,用于自动填充当前时间戳。 它不包含实际的时间戳。数据库将在执行命令时替换此占位符。
当您在 database.ref 内部使用它时,它会按预期工作,但在它外部只是一个无用的对象。
请参阅此SO Answer 了解更多信息。
【讨论】:
这是我必须做的:
firebase.firestore.FieldValue.serverTimestamp()
来源:
https://firebase.google.com/docs/reference/js/firebase.firestore.FieldValue
【讨论】:
database.ServerValue.TIMESTAMP 解决方案适用于实时数据库。