web-dev-qa-db-fra.com

Comment obtenir l'horodatage du serveur dans Cloud Functions for Firebase?

Je sais que vous pouvez extraire l'horodatage du serveur Web, ios et Android - mais qu'en est-il des nouvelles fonctions de cloud pour Firebase? Je n'arrive pas à comprendre comment y obtenir l'horodatage du serveur? Utilisez Le cas est moi voulant timestamper un email quand il arrive.

Sur le Web, il s'agit de Firebase.database.ServerValue.TIMESTAMP

Mais cela ne semble pas être disponible dans l'interface du serveur de nœud de fonctions?

Je pense qu'il est tard et il se peut que je manque le point ici ...

MODIFIER

J'initialise comme ça

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

Ensuite, on l’appelle comme ça ..

Firebase.database.ServerValue.TIMESTAMP

Mais, cela provient d'une intégration côté client. Sur les fonctions, Firebase n’est pas initialisé comme ça. J'ai essayé

admin.database().ServerValue.TIMESTAMP

et

fb.ServerValue.TIMESTAMP
37
Justin Handley

Puisque vous utilisez déjà le SDK admin, la syntaxe correcte est la suivante:

admin.database.ServerValue.TIMESTAMP
80
Frank van Puffelen

Si vous utilisez le SDK d'administration Firebase, voici la syntaxe correcte (vérifié 2019-08-27):

const admin = require('firebase-admin');
// or
// import * as admin from 'firebase-admin';

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

// Using Realtime Database
admin.database.ServerValue.TIMESTAMP
47
Paul

Je suis nouveau sur node.js moi-même, mais Date.now () fonctionne dans mes tests.

Modifier

J'ai mal compris votre question - vous n'avez pas réalisé que vous vouliez horodater les données que vous stockiez dans la base de données Firebase. Je pensais que vous vouliez simplement obtenir l'heure sur le serveur qui exécutait votre fonction cloud. Si vous souhaitez horodater un e-mail reçu stocké dans la base de données Firebase, alors utiliser admin.database.ServerValue.TIMESTAMP Est sans conteste la meilleure approche.

Juste pour ma propre éducation, j'ai écrit la fonction suivante pour voir comment les temps se comparent. Je m'attendrais à ce que les heures sur le serveur de fonction cloud et le serveur de base de données soient synchronisées avec une référence de temps très précise. Lorsque j'exécute cette fonction, l'horodatage de la base de données se situe généralement dans les cent millisecondes de la valeur Date.now(). L'horodatage de la base de données étant un peu plus tardif est raisonnable, étant donné qu'il faut un certain temps à la fonction cloud pour se connecter à la base de données et effectuer l'écriture.

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);
    });
11
Bob Snyder

Juste pour clarifier pour les futurs lecteurs:

admin.database.ServerValue.TIMESTAMP Renvoie un non-null Object Et constitue une valeur de substitution pour le remplissage automatique de l'horodatage actuel. Il ne contient pas l'horodatage réel. La base de données remplacera cet espace réservé lorsqu’elle exécutera la commande.

Si vous l'utilisez dans un database.ref, Alors il fonctionnera comme vous le souhaitez et constitue le moyen privilégié pour entrer un horodatage:

var sessionsRef = firebase.database().ref("sessions");
sessionsRef.Push({
startedAt: firebase.database.ServerValue.TIMESTAMP // this will write 'startedAt: 1537806936331`
});

Mais si vous essayez de l’utiliser en dehors de la fonction de base de données (par exemple, pour renvoyer l’heure maintenant ou effectuer des calculs), il retournera un objet que vous ne pouvez pas utiliser:

console.log(firebase.database.ServerValue.TIMESTAMP) // this will return an [object Object]

Voir plus à ce sujet dans firebase.database.ServerValue et dans ce SO question .

Date.now() fonctionne très bien en dehors d'une fonction database si vous souhaitez l'utiliser pour un calcul ou pour toute autre utilisation générale.

console.log(Date.now()); // this will return 1537806936331

Tous les deux utilisent unix time, Le nombre de secondes écoulées depuis 00:00:00, heure universelle coordonnée (UTC), le jeudi 1er janvier 1970, sans rapport avec le fuseau horaire. C'est le même numéro sur le client et sur le serveur (... ou presque :-). Voir heure unix .

10
Spiral Out