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
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;
});
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.
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);
});
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."
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 );
});
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
Utilisation de Firebase Firestone 18.0.1 (Com.google.firebase.Timestamp)
val timestamp = (document.data["timestamp"] as Timestamp).toDate()
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());