Ich verwende Firebase für meine Chat-Anwendung. Im Chatobjekt füge ich mit der Firebase.ServerValue.TIMESTAMP
-Methode einen Zeitstempel hinzu.
Ich muss die empfangene Nachricht in dieser Chatanwendung mit diesem Zeitstempel anzeigen.
wenn es die aktuelle Zeit ist, muss ich nur die Uhrzeit anzeigen. Es gibt Unterschiede, die ich Tag und Uhrzeit oder nur Datum angeben muss.
Ich habe den folgenden Code zum Konvertieren des Firebase-Zeitstempels verwendet, erhalte jedoch nicht die tatsächliche Zeit.
var timestamp = '1452488445471';
var myDate = new Date(timestamp*1000);
var formatedTime=myDate.toJSON();
Bitte schlagen Sie die Lösung für dieses Problem vor
Firebase.ServerValue.TIMESTAMP ist kein tatsächlicher Zeitstempel. Es ist konstant, dass er durch den tatsächlichen Wert im Server ersetzt wird, wenn er in einer Variablen festgelegt ist.
mySessionRef.update({ startedAt: Firebase.ServerValue.TIMESTAMP });
mySessionRef.on('value', function(snapshot){ console.log(snapshot.val()) })
//{startedAt: 1452508763895}
wenn Sie Serverzeit erhalten möchten, können Sie den folgenden Code verwenden
fb.ref("/.info/serverTimeOffset").on('value', function(offset) {
var offsetVal = offset.val() || 0;
var serverTime = Date.now() + offsetVal;
});
In der Tat funktioniert es nur für mich, wenn es benutzt wird
firebase.database.ServerValue.TIMESTAMP
Mit einer "Datenbank" mehr im Namespace.
Für diejenigen, die nach der Firebase Firestore gleichwertig suchen. Es ist
firebase.firestore.FieldValue.serverTimestamp()
z.B.
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);
});
Der richtige Weg, um einen Zeitstempel an ein Datenbankupdate anzuhängen, besteht darin, einen Platzhalterwert in Ihre Anfrage einzufügen. In dem folgenden Beispiel ersetzt Firebase die Eigenschaft createdAt
durch einen Zeitstempel:
firebaseRef = firebase.database().ref();
firebaseRef.set({
foo: "bar",
createdAt: firebase.database.ServerValue.TIMESTAMP
});
Gemäß der Dokumentation ist der Wert firebase.database.ServerValue.TIMESTAMP
: "Ein Platzhalterwert zum automatischen Auffüllen des aktuellen Zeitstempels (Zeit seit der Unix-Epoche in Millisekunden) durch die Firebase-Datenbankserver."
innerhalb der Firebase-Funktionen wird der Zeitstempel folgendermaßen transformiert:
timestampObj.toDate()
timestampObj.toMillis().toString()
dokumentation hier https://firebase.google.com/docs/reference/js/firebase.firestore.Timestamp
Es ist einfach. Verwenden Sie diese Funktion, um den Server-Zeitstempel als Millisekunden einmalig zu erhalten:
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 );
});
};
Jetzt können Sie es überall verwenden:
getServerTime( function( now ) {
console.log( now );
});
Gemäß der neuesten Firebase-Dokumentation sollten Sie Ihren Firebase-Zeitstempel in Millisekunden umrechnen. Sie können also die Variable estimatedServerTimeMs
unten verwenden:
var offsetRef = firebase.database().ref(".info/serverTimeOffset");
offsetRef.on("value", function(snap) {
var offset = snap.val();
var estimatedServerTimeMs = new Date().getTime() + offset;
});
Während firebase.database.ServerValue.TIMESTAMP viel genauer ist, wird und für die meisten Lese-/Schreibvorgänge vorzuziehen, kann es gelegentlich .__ sein. nützlich, um den Zeitversatz des Clients in Bezug auf die .__ zu schätzen. Server der Firebase-Echtzeitdatenbank. Sie können einen Rückruf an die .__ anhängen. location /.info/serverTimeOffset, um den Wert in Millisekunden zu erhalten dass Firebase Realtime Database-Clients die lokal gemeldete Zeit hinzufügen (Epochenzeit in Millisekunden), um die Serverzeit zu schätzen. Beachten Sie, dass Die Genauigkeit dieses Offsets kann durch die Latenzzeit des Netzwerks beeinflusst werden. ist vor allem für das Erkennen großer (> 1 Sekunde) Diskrepanzen nützlich in der uhrzeit.
https://firebase.google.com/docs/database/web/offline-capabilities
zeitstempel ist ein Objekt
timestamp= {nanoseconds: 0,
seconds: 1562524200}
console.log(new Date(timestamp.seconds*1000))
Arbeiten mit Firebase Firestone 18.0.1 (Com.google.firebase.Timestamp)
val timestamp = (document.data["timestamp"] as Timestamp).toDate()
Bei Firestore, einer neuen Datenbankgeneration von Google, hilft der folgende Code Ihnen bei der Lösung dieses Problems.
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());