2017-10-17 235 views
0

我正在計算兩次離子之間的差異。獲取相關值的列表Angularfire 4 Ionic 3

我使用AngularFire和我的樹是這個樣子:

{ 
    "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" 
         } 
        } 
       } 
      } 
     } 
    } 
} 

我想獲得第一,第二,第三和第四,第五和第六之間的差異,記住,他們是由相關的標記「狀態」。

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

總是在In和Out之間做區別。

In's是指當一個人進入房間時。當一個人走出房間時,Out是。我想記錄一個人在房間內的時間。

那麼結果將是:

"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 

你對這個重構代碼,以便它工作正常的任何提示?

記住我使用離子3 AngularFire4

欣賞的幫助。

+0

IN和OUT如何相互關聯?你能描述一下用例嗎? – Orlandster

+0

謝謝你。用更好的描述進行編輯。檢查出來:**出去是當一個人走出房間的時候。我想記錄一個人在一個房間內的時間。** – spaceman

+0

好的,有問題。工作的答案。 – Orlandster

回答

0

爲了實現您的目標,我建議您重構您的數據。目前,IN和OUT之間沒有真正的關係。

一種可能的方法是創建一個包裹checkIn和checkOut的節點。我們稱之爲session。每次用戶簽入一個新會話時,都會創建一個新的會話,並且每次用戶檢出一個會話get都關閉。

你的結構可能類似於此:

"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 
     }, 
    } 
    } 
} 

下面是一個代碼示例(只給你一個想法,怎麼可能看起來像):

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

希望這給你一個想法,它是如何完成的。