web-dev-qa-db-de.com

Firebase TIMESTAMP zu Datum und Uhrzeit

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

31
Kichu

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;
  });
28
Bek

In der Tat funktioniert es nur für mich, wenn es benutzt wird

firebase.database.ServerValue.TIMESTAMP

Mit einer "Datenbank" mehr im Namespace.

18
Tiago Gouvêa

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);
});

Dokumente

6
Kyle Finley

Lösung für neuere Versionen von Firebase (nach Jan 2016)

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."

5
Matt

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

3
Dan Alboteanu

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 );
});

Warum diesen Weg verwenden?

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

2
dino

zeitstempel ist ein Objekt

timestamp= {nanoseconds: 0,
seconds: 1562524200}

console.log(new Date(timestamp.seconds*1000))
1
vineet

Arbeiten mit Firebase Firestone 18.0.1 (Com.google.firebase.Timestamp)

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

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());