web-dev-qa-db-fra.com

Firebase TIMESTAMP à date et heure

J'utilise firebase pour mon application de chat. Dans l'objet de discussion, j'ajoute un horodatage à l'aide de la méthode Firebase.ServerValue.TIMESTAMP.

Je dois afficher l'heure du message reçu dans mon application de discussion en utilisant cet horodatage.

s'il s'agit de l'heure actuelle, j'ai besoin d'afficher l'heure uniquement. Il a une différence de jours. Je dois afficher la date et l'heure ou seulement la date.

J'ai utilisé le code suivant pour convertir l'horodatage Firebase mais je n'obtiens pas l'heure réelle.

var timestamp = '1452488445471';
var myDate = new Date(timestamp*1000);
var formatedTime=myDate.toJSON();

S'il vous plaît suggérer la solution pour ce problème

31
Kichu

Firebase.ServerValue.TIMESTAMP n'est pas un horodatage réel, il est constant. Il sera remplacé par la valeur réelle du serveur si vous le définissez dans une variable.

mySessionRef.update({ startedAt: Firebase.ServerValue.TIMESTAMP });
mySessionRef.on('value', function(snapshot){ console.log(snapshot.val()) })
//{startedAt: 1452508763895}

si vous voulez obtenir l'heure du serveur, vous pouvez utiliser le code suivant

  fb.ref("/.info/serverTimeOffset").on('value', function(offset) {
    var offsetVal = offset.val() || 0;
    var serverTime = Date.now() + offsetVal;
  });
28
Bek

En fait, ça ne marche que pour moi quand on l'utilise

firebase.database.ServerValue.TIMESTAMP

Avec une "base de données" plus sur un espace de noms.

18
Tiago Gouvêa

Pour ceux qui recherchent le Firebase Firestore équivalent. Ses

firebase.firestore.FieldValue.serverTimestamp()

par exemple.

firebase.firestore().collection("cities").add({
    createdAt: firebase.firestore.FieldValue.serverTimestamp(),
    name: "Tokyo",
    country: "Japan"
})
.then(function(docRef) {
    console.log("Document written with ID: ", docRef.id);
})
.catch(function(error) {
    console.error("Error adding document: ", error);
});

Docs

6
Kyle Finley

Solution pour les nouvelles versions de Firebase (après janvier 2016)

Pour attacher un horodatage à une mise à jour de la base de données, vous devez associer une valeur de substitution à votre demande. Dans l'exemple ci-dessous, Firebase remplacera la propriété createdAt par un horodatage: 

firebaseRef = firebase.database().ref();
firebaseRef.set({
  foo: "bar", 
  createdAt: firebase.database.ServerValue.TIMESTAMP
});

Selon documentation , la valeur firebase.database.ServerValue.TIMESTAMP est la suivante: "Valeur fictive pour le remplissage automatique de l'horodatage actuel (temps écoulé depuis l'époque Unix, en millisecondes) par les serveurs de base de données Firebase."

5
Matt

C'est simple. Utilisez cette fonction pour obtenir l’horodatage du serveur sous forme de millisecondes une fois seulement:

var getServerTime = function( cb ) {
    this.db.ref( '.info/serverTimeOffset' ).once( 'value', function( snap ) {
      var offset = snap.val();

      // Get server time by milliseconds
      cb( new Date().getTime() + offset );
    });
};

Maintenant, vous pouvez l'utiliser n'importe où comme ça:

getServerTime( function( now ) {
    console.log( now );
});

Pourquoi utiliser cette voie?

Selon la dernière documentation Firebase, vous devez convertir l’horodatage de votre base Firebase en millisecondes. Vous pouvez donc utiliser la variable estimatedServerTimeMs ci-dessous:

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

Bien que firebase.database.ServerValue.TIMESTAMP soit beaucoup plus précis, et préférable pour la plupart des opérations de lecture/écriture, il peut parfois être utile pour estimer le décalage d'horloge du client par rapport au Les serveurs de la base de données en temps réel Firebase. Vous pouvez joindre un rappel au fichier emplacement /.info/serverTimeOffset pour obtenir la valeur, en millisecondes, les clients de la base de données en temps réel Firebase s'ajoutent à l'heure locale signalée (Époque en millisecondes) pour estimer l'heure du serveur. Notez que La précision de ce décalage peut être affectée par la latence du réseau, et ainsi de suite est utile principalement pour découvrir des écarts importants (> 1 seconde) en temps d'horloge.

https://firebase.google.com/docs/database/web/offline-capabilities

2
dino

Utilisation de Firebase Firestone 18.0.1 (Com.google.firebase.Timestamp)

val timestamp = (document.data["timestamp"] as Timestamp).toDate()
0
rockdaswift

Pour Firestore, nouvelle base de données de Google, le code suivant vous aidera simplement à résoudre ce problème.

var admin    = require("firebase-admin");

var serviceAccount = require("../admin-sdk.json"); // auto-generated file from Google firebase.

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});
var db = admin.firestore();

console.log(admin.firestore.Timestamp.now().toDate());
0