2017-10-17 3 views
0

이온으로 2 번 차이를 계산하려고합니다. 내가 AngularFire 내 나무를 사용하고관련 가치 목록보기 Angularfire 4 Ionic 3

은 다음과 같습니다

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

내가 여섯 번째 제 1, 제 2, 세 번째와 네 번째, 다섯 번째 사이의 차이를 좀하고 싶습니다, 그들이으로 관련되어 있음을 기억 태그 "Status".

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

항상에서의 아웃의 차이 일입니다.

사람이 방에 들어올 때를위한 것입니다. 밖으로 나가는 것은 사람이 방에서 나올 때를위한 것입니다. 나는 사람이 방 안으로 들어가는 시간을 기록하고 싶다.

그래서 결과는 다음과 같습니다

"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 

당신이 잘 작동하므로이 코드를 리팩토링에 어떤 팁이 있나요?

내가 AngularFire4

와 이온 (3)을 사용하고 기억이 도움을 주셔서 감사합니다.

+0

어떻게 IN과 OUT이 서로 관련이 있습니까? 유스 케이스를 설명해 주시겠습니까? – Orlandster

+0

고마워요. 더 나은 설명으로 편집되었습니다. 그것을 확인해보십시오 : ** Out은 사람이 방에서 나올 때를위한 것입니다. 사람이 방 안으로 들어가는 시간을 기록하고 싶습니다. ** – spaceman

+0

좋습니다, 잡았다. 답변 작성 중. – Orlandster

답변

0

목표를 달성하려면 데이터 재구성을 권장합니다. 지금은 IN과 OUT 사이에는 실제 관계가 없습니다.

가능한 접근 방식은 checkIn과 checkOut을 래핑하는 노드를 만드는 것입니다. 그것을 session이라고 부르 자. 사용자가 새로운 세션을 체크인 할 때마다 get이 생성되고 사용자가 세션을 체크 아웃 할 때마다 get은 닫힙니다.

귀하의 구조가이 비슷한 볼 수 있었다

이 당신에게 아이디어를 제공

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

희망 : 여기

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

는 코드 예제 (당신에게이 같이 수있는 방법을 알 수 있도록) , 어떻게 할 수 있었는지.