14

Ich weiß, Sie können den Server-Zeitstempel in Web, iOS und Android ziehen - aber was ist mit den neuen Cloud-Funktionen für Firebase? Ich kann nicht herausfinden, wie man den Zeitstempel des Servers dort erhält? Anwendungsfall ist, dass ich eine E-Mail mit dem Zeitstempel versehen möchte, wenn sie eintrifft.Wie bekomme ich den Server-Zeitstempel in Cloud-Funktionen für Firebase?

auf Web ist es Firebase.database.ServerValue.TIMESTAMP

Aber das scheint nicht in den Funktionen Knoten-Server-Schnittstelle zur Verfügung steht?

Ich denke, es ist spät und ich kann hier den Punkt fehlt ...

EDIT

Ich mag dieses Dann

admin.initializeApp(functions.config().firebase); 
const fb = admin.database() 

bin initialisiert, es so genannt wird. .

Firebase.database.ServerValue.TIMESTAMP 

Aber das ist von einer clientseitigen Integration. Bei Funktionen wird Firebase nicht wie folgt initialisiert. Ich habe versucht,

admin.database().ServerValue.TIMESTAMP 

und

fb.ServerValue.TIMESTAMP 
+0

Soweit ich weiß '' ServerValue.TIMESTAMP' ist gleichermaßen in Cloud-Funktionen für Firebase verfügbar. Können Sie den [minimalen Code, der das Problem reproduziert] (http://stackoverflow.com/help/mcve) teilen? –

+0

Hallo @FrankvanPuffelen - Ich habe das Original mit einem Beispiel meiner Initialisierung bearbeitet und was nicht funktioniert. –

Antwort

38

Da Sie bereits den Admin-SDK verwenden, die korrekte Syntax ist:

admin.database.ServerValue.TIMESTAMP 
+0

Dies ist die einfache Antwort, die ich gesucht habe - danke @ frank-van-paffen –

+0

Wie drucken Sie Zeitstempel in Millisekunden mit diesem? admin.database.ServerValue.TIMESTAMP gibt ein Objekt {'.sv': 'timestamp'} zurück, von dem ich glaube, dass es ein Platzhalter ist. –

+0

Es * ist * tatsächlich ein Platzhalter. Um den tatsächlichen Wert zu erhalten, hören Sie sich den Ort an, an den Sie schreiben. –

7

Ich bin neu mich node.js, aber Date.now() Werke in meinen Tests.

bearbeiten

ich falsch verstanden Sie in Frage - Artikel nicht merkt man zeitzustempeln Daten wollte Sie in der Firebase Datenbank gespeichert wurden. Ich dachte, Sie wollten einfach die Zeit auf dem Server haben, auf dem Ihre Cloud-Funktion läuft. Wenn Sie eine empfangene E-Mail, die in der Firebase-Datenbank gespeichert ist, mit einem Zeitstempel versehen möchten, ist die Verwendung von admin.database.ServerValue.TIMESTAMP ohne Frage der beste Ansatz.

Nur für meine eigene Ausbildung, schrieb ich die folgende Funktion, um zu sehen, wie die Zeiten vergleichen. Ich würde erwarten, dass die Zeiten auf dem Cloud-Funktionsserver und dem Datenbankserver mit einer sehr genauen Zeitreferenz synchronisiert werden. Wenn ich diese Funktion ausführe, ist der Zeitstempel der Datenbank normalerweise innerhalb von hundert Millisekunden des Werts Date.now(). Der Datenbank-Zeitstempel, der etwas später ist, ist vernünftig, da die Cloud-Funktion einige Zeit braucht, um sich mit der Datenbank zu verbinden und das Schreiben durchzuführen.

exports.timeTest = functions.database.ref('/test/trigger') 
    .onWrite(event => { 

     const now= Date.now(); 
     console.log('now=', now); 

     const timeVals = { 
      dateNow : now, 
      serverTimestamp : admin.database.ServerValue.TIMESTAMP 
     }; 

     return event.data.ref.parent.child('times').update(timeVals); 
    }); 
+0

Und holt Date.now() die Zeit des Knotenservers oder die Zeit vom Computer des Clients, um die Berechnung durchzuführen? Oder benutzt es eine standardisierte Uhr? Wenn ich meine Computerzeit auf einmal einstellte, habe ich Date.now() dann auf eine andere Zeit gesetzt und habe Date gemacht.jetzt() würde ich zwei verschiedene Ergebnisse bekommen? –

+0

@JustinHandley: Meine Antwort aktualisiert. 'Date.now()' ist die Uhrzeit auf dem Server, auf dem die Cloud-Funktion ausgeführt wird. Es ist völlig unabhängig von der Zeit auf jedem Client-Computer. –

5

Wenn Sie die Firebase Admin SDK verwenden, hier ist die korrekte Syntax (Checked 2017.12.07) :

const admin = require('firebase-admin'); 

// Using Cloud Firestore 
admin.firestore.FieldValue.serverTimestamp() 

// Using Realtime Database 
admin.database.ServerValue.TIMESTAMP 
+0

Arbeiten wie ein Charme :-) Danke. – Qorbani

Verwandte Themen