web-dev-qa-db-ja.com

Firebaseからサーバー時間を取得するにはどうすればよいですか

私はfirebaseでangularjsを使用しています。

$scope.createdDate = new Date();

クライアントの時刻を使用しますが、クライアント側の時刻が異なる可能性があるため、FirebaseServerの現在の時刻を使用したいと思います。どうすればこれを角度で行うことができますか?

7
NSCoder

Firebase3の場合は、firebase.database.ServerValue.TIMESTAMPを使用してください

$scope.createdDate = firebase.database.ServerValue.TIMESTAMP

ここにドキュメント

13
Dede

印刷するとき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)
    });

クライアントからサーバーのタイムスタンプを直接読み取る簡単な方法があるはずだと思います。

編集1: Firebaseへの1回の呼び出しを使用するより良い方法が見つかりました

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

Firebaseからサーバー時間を追加する方法について このFirebaseドキュメント を指摘してくれたJonasGrumannに感謝します。

// Get created date from Firebase servers
var createdDate = new Firebase('https://somedomain.firebaseIO.com/post/createDate');
createdDate.set(Firebase.ServerValue.TIMESTAMP);
6
NSCoder