【问题标题】:Firebase getting server timestampFirebase 获取服务器时间戳
【发布时间】:2017-08-26 14:21:02
【问题描述】:

我正在尝试这样构建我的 firebase 数据库。

年/月/日/消息 例如2017/08/26/留言

因此,我需要获取firebase服务器时间来设置新的消息引用路径。 我使用了Firebase.database.ServerValue.TIMESTAMP,但它返回一个占位符,仅在插入期间转换为纪元时间。因此我的'createdAt' 字段是正确的。但我需要一种方法来创建我想要的路径结构。

let epoch = Firebase.database.ServerValue.TIMESTAMP
console.log(`epoch : ${epoch}`) // it returns an object
let date = new Date(epoch) // date creation fail here
console.log(`date : ${date}`)
let messagesRef = db.ref(`messages/${date.getFullYear()}/${date.getMonth()}/${date.getDate()}`)
let newMessage = {
  createdAt: epoch    
}
messagesRef.push(newMessage)

【问题讨论】:

    标签: javascript firebase


    【解决方案1】:

    有一些方法,但很奇怪,我能想到的最简单的方法是推送消息,然后抓取消息以获取刚刚推送的时间戳。

    另一种方法是获取新pushRef的key

    messagesRef.push().key

    然后通过解码firebase密钥获取时间戳(因为它们是由时间戳生成的) decode firebasekey

    @cartant state 你可以使用服务器时钟偏移

    var offsetRef = firebase.database().ref(".info/serverTimeOffset");
    offsetRef.on("value", function(snap) {
      var offset = snap.val();
      var estimatedServerTimeMs = new Date().getTime() + offset;
    });

    【讨论】:

    • 在客户端创建推送键。他们使用客户端的时间,但考虑到相对于服务器的时钟偏差。仅使用时钟偏差来调整本地时间会更简单。见firebase.google.com/docs/database/web/…
    • @cartant 同意
    • 很棒的评论@cartant。使用偏斜(我忘记了它已记录在案)可能值得自己回答。
    • 不确定我是否正确暗示了您的答案。因此,您建议我将“虚拟”消息推送到 Firebase 并通过 messagesRef.push().key 检索它的时间?
    猜你喜欢
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2014-10-21
    • 2017-09-19
    • 2020-10-24
    • 2020-05-03
    • 1970-01-01
    • 2016-12-13
    相关资源
    最近更新 更多