如何从Firebase获得服务器时间

NSC*_*der 6 javascript date server-side angularjs firebase

我正在使用带有firebase的angularjs以及我使用的时候

$scope.createdDate = new Date();
Run Code Online (Sandbox Code Playgroud)

它使用客户端上的时间,但我想使用Firebase服务器当前时间,因为客户端时间可能会有所不同.我怎么能在棱角分明呢?

Ded*_*ede 12

对于firebase3,请使用firebase.database.ServerValue.TIMESTAMP

$scope.createdDate = firebase.database.ServerValue.TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

doc在这里


can*_*bax 9

当你打印firebase.database.ServerValue.TIMESTAMP它会给你这个对象{.sv: "timestamp"}

要在客户端上访问firebase服务器的时间戳,首先需要将值写入服务器然后读取值.

 firebase.database().ref('currentTime/').update({ time: firebase.database.ServerValue.TIMESTAMP })
    .then(function (data) {
      firebase.database().ref('currentTime/')
        .once('value')
        .then(function (data) {

          var t = data.val()['time'];
          console.log('server time: ', t);

        }, function serverTimeErr(err) {
          console.log('coulnd nt reach to the server time !');
        });
    }, function (err) {
      console.log ('set time error:', err)
    });
Run Code Online (Sandbox Code Playgroud)

我认为必须有一种更简单的方法来直接从客户端读取服务器时间戳.

编辑1:刚发现一个更好的方法是使用1次调用firebase

firebase.database().ref('/.info/serverTimeOffset')
  .once('value')
  .then(function stv(data) {
    console.log(data.val() + Date.now());
  }, function (err) {
    return err;
  });
Run Code Online (Sandbox Code Playgroud)

  • @FirasChebbah从纪元到毫秒,不是秒。如果要秒,则除以1000。 (3认同)
  • 你怎么知道这是错的?现在是在Firebase服务器中的时间。 (2认同)

NSC*_*der 5

感谢Jonas Grumann指出了此 Firebase 文档,其中介绍了如何从Firebase 添加服务器时间。

// Get created date from Firebase servers
var createdDate = new Firebase('https://somedomain.firebaseIO.com/post/createDate');
createdDate.set(Firebase.ServerValue.TIMESTAMP);
Run Code Online (Sandbox Code Playgroud)