2017-10-17 70 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... 
}); 

希望这给你一个想法,它是如何完成的。