2017-10-17 4 views
0

Je travaille pour calculer la différence entre deux fois en ionique.Obtenir la liste des valeurs connexes Angularfire 4 Ionic 3

J'utilise AngularFire et mon arbre ressemble à ceci:

{ 
    "users": { 
     "name": { 
      "17": { 
       "10": { 
        "2017": { 
         "-Kwfm1k9_A74PzlmijUJ": { 
          "date": "17/10/2017", 
          "hora": "17:20:58", 
          "status": "In" 
         }, 
         "-Kwfm8wEJ8Oob4YFvNNu": { 
          "date": "17/10/2017", 
          "hora": "17:21:27", 
          "status": "Out" 
         }, 
         "-KwfoKkPJMt2g8AQNmxq": { 
          "date": "17/10/2017", 
          "hora": "17:31:00", 
          "status": "In" 
         }, 
         "-Kwfp0BOAGnM-2_MfziP": { 
          "date": "17/10/2017", 
          "hora": "17:33:58", 
          "status": "Out" 
         }, 
         "-KwfqW5XKpUNedda4rZz": { 
          "date": "17/10/2017", 
          "hora": "17:40:31", 
          "status": "In" 
         }, 
         "-Kwg0pQDlI3FMV3BPNaa": { 
          "date": "17/10/2017", 
          "hora": "18:29:58", 
          "status": "Out" 
         } 
        } 
       } 
      } 
     } 
    } 
} 

Je voudrais obtenir une différence entre la première et la deuxième, troisième et quatrième, cinquième et sixième, se rappelant qu'ils sont liés par la tag "Statut".

First In - Out = difference 
Second In - Out = difference 
Third In - Out = difference 

Toujours faire la différence entre l'entrée et la sortie.

In sont pour lorsqu'une personne entre dans la pièce. Les sorties sont pour quand une personne sort de la pièce. Je veux enregistrer le temps qu'une personne passe à l'intérieur d'une pièce.

Ainsi, les résultats seraient:

"17:20:58" - "17:21:27" = 00:01:29 
"17:31:00" - "17:33:58" = 00:02:58 
"17:40:31" - "18:29:58" = 00:49:27 

Avez-vous une astuce sur refactorisation ce code afin qu'il fonctionne bien?

Se souvenir que je utilise ionique 3 avec AngularFire4

apprécie l'aide.

+0

En quoi les entrées et sorties sont-elles liées les unes aux autres? Pouvez-vous décrire le cas d'utilisation? – Orlandster

+0

Merci l'homme. Edité avec une meilleure description. Check it out: ** Out sont pour quand une personne sort de la pièce. Je veux enregistrer le temps qu'une personne passe à l'intérieur d'une pièce. ** – spaceman

+0

ok, gotcha. Travailler sur une réponse. – Orlandster

Répondre

0

Pour atteindre votre objectif, je vous recommande de restructurer vos données. Pour l'instant, il n'y a pas de réelle relation entre les IN et les OUT.

Une approche possible serait de créer un nœud qui enveloppe le checkIn et le checkOut. Appelons-le session. Chaque fois qu'un utilisateur vérifie une nouvelle session, il est créé et chaque fois qu'un utilisateur extrait une session, il est fermé.

Votre structure pourrait ressembler à ceci:

"sessions": { 
    "uid": { // or name or whatever 
    "17-10-2017": { // not sure if you need the date in the structure, but if you need it make a single node like this 
     "-Kwfm1k9_A74PzlmijUJ": { // this is a session create it on each check in 
     "checkin": 1508354574, // timestamp 
     "checkout": 1508354584 
     }, 
    } 
    } 
} 

Voici un exemple de code (juste pour vous donner une idée comment il pourrait ressembler):

var ref = firebase.database().ref("sessions/uid"); // uid must be dynamic 

// checkin 
ref.push({ 
    checkin: firebase.database.ServerValue.TIMESTAMP // make sure to use the servers timestamp 
}); // creates a new session with a pushkey as id 

// checkout 
ref.child('sessionId').update({ 
    checkout: firebase.database.ServerValue.TIMESTAMP 
}); 

// stats 
ref.child('sessionId').once('value', function(snap) { 
    var session = snap.val(); 
    var difference = session.checkout - session.checkin; 

    // now you have the difference in milliseconds or seconds depending on your timestamp format. this can be formatted whatever unit you want e.g. minutes, hours... 
}); 

espère que cela vous donne une idée , comment cela pourrait être fait.