2016-01-11 43 views
0

我有需要兩個數組代碼:如何計算所有用戶的總工作時間?

登錄陣列

註銷陣列

,然後我的代碼找到一個登錄和註銷之間的差別,所以這將是他的工作時間在辦公室。因此,將計算所有的持續時間,並將爲每個日期的單個用戶獲得總工作時間。月份。

現在這隻適用於一個用戶。我如何計算每個用戶的總持續時間並將其打印在視圖中?

<?php 
       $loginarry = $attendances_logins; 
       $logoutarry =$attendances_logouts; 
       $timeduration=0; 
       $login_i=0; 
       $logout_i=0; 


       echo '<table border="1px" class="table table-striped table-bordered table-hover" id="dataTables-example">'; 
       echo '<tr><th>Login</th><th>Logout</th><th>Duration</th></tr>'; 

       //echo ("Array Length = " . count($loginarry)." & ".count($logoutarry)."\n<br/>"); 
     while(true) 
     { 
      if($login_i >= count($loginarry) && $logout_i >= count($logoutarry)) 
       break; 

      if($logout_i >= count($logoutarry)) 
      { 
       //echo ("Login[".$login_i."] : ".$loginarry[$login_i]->date_data." and Logout : -----------------\n<br/>"); 


echo ("<tr><td>".$loginarry[$login_i]->date_data." </td><td>Not Available</td><td>Not Available</td></tr>"); 


    //   echo ("<tr> <td>".$loginarry->date_data." </td><td> Data Not Available</td></tr>"); 
       $login_i++; 
       continue; 
      } 

      if(($login_i+1) == count($loginarry) && ($logout_i+1) < count($logoutarry)) 
      { 
       echo ("<tr><td>Data Not Available </td><td>".$logoutarry[$logout_i]->date_data."\n</td><td>Data Not Available</td></tr>"); 
      $logout_i++; 
      continue; 
      } 

      if($login_i >= count($loginarry)) 
      { 
       echo ("<tr><td> Data Not Available </td><td>".$logoutarry[$logout_i]->date_data."\n<td>Data Not Available</td></td></tr>"); 
          $logout_i++; 
       continue; 
      } 
      //echo("******* ".(new DateTime($loginarry[$login_i+1]->date_data))->format('U') . " **** ".(new DateTime($logoutarry[$logout_i]->date_data))->format('U'). "\n<br/>"); 

      //check if next login time is smaller then current logout time - if so skip current login time 
      if($login_i < (count($loginarry)-1) && (new DateTime($logoutarry[$logout_i]->date_data))->format('U') > (new DateTime($loginarry[$login_i+1]->date_data))->format('U')) 
      //if(date_diff(date_create($logoutarry[$logout_i]->date_data), date_create($loginarry[$login_i+1]->date_data)) > 0) 
      { 
       echo ("<tr><td>".$loginarry[$login_i]->date_data."</td><td>Data Not Available</td><td>Data Not Available</td></tr>"); 
       $login_i++; 
       continue; 
      } 

      // 
      if((new DateTime($loginarry[$login_i]->date_data))->format('U') > (new DateTime($logoutarry[$logout_i]->date_data))->format('U')) 
      //if(date_diff(date_create($loginarry[$login_i]->date_data), date_create($logoutarry[$logout_i]->date_data)) > 0) 
        { 
       echo ("<tr><td>Data Not Available </td><td>".$logoutarry[$logout_i]->date_data."\n</td><td>Data Not Available</td></tr>"); 

          $logout_i++; 
          continue; 
        } 

      //if more logout entries then skip to last logout entry 
      if($login_i < (count($loginarry)-1) && $logout_i < (count($logoutarry)-1) && (new DateTime($logoutarry[$logout_i+1]->date_data))->format('U') < (new DateTime($loginarry[$login_i+1]->date_data))->format('U')) 
      { 
       echo(" <tr><td> Data Not Available</td> <td>".$logoutarry[$logout_i]->date_data."\n</td> <td>Data Not Available</td> </tr>"); 
          $logout_i++; 
          continue; 
      } 

      echo ("<tr><td> ".$loginarry[$login_i]->date_data."</td> <td>".$logoutarry[$logout_i]->date_data."</td>"); 




      $singleduration = ((new DateTime($logoutarry[$logout_i]->date_data))->format('U') - (new DateTime($loginarry[$login_i]->date_data))->format('U')); 
      if($singleduration > 43200)//12 hours X 3600 seconds) 
      { 
       //$timeduration += $singleduration; 
       echo ("<td class='danger'>Huge duration - not considered - please contact HR (".$singleduration.")</td></tr>"); 
      } 
      else 
      { 
       $timeduration += $singleduration; 
       echo ("<td>".gmdate("H:i:s",$singleduration)."</td></tr>"); 
      } 
      $login_i++; 
      $logout_i++; 

     } 

      echo ("</table>"); 

      //$finaltime=gmdate("H:i:s",$timeduration); 
      //$timedurationstr = ConvertSecondsToStr($timeduration); 
      $hours = 0; 
      if($timeduration > 3600) 
      { 
       $hours = floor($timeduration/3600); 
       $timeduration -= (3600*$hours); 
      } 
      $min = 0; 
      if($timeduration > 60) 
      { 
       $min = floor($timeduration/60); 
       $timeduration -= (60*$min); 
      } 
      $seconds = $timeduration; 



      //echo("<div class= 'row'> <div class ='col-sm-4' style= 'float:right'><h3 class='alert alert-success'><center>Total Hours Worked ". $finaltime." Hours</center></h3></div></div>"); 
      echo("<div class= 'row'> <div class ='col-sm-4' style= 'float:right'><h3 class='alert alert-success'><center>Total time worked: ". $hours." Hour(s) ".$min." Minute(s) ".$seconds." Second(s)</center></h3></div></div>"); 
      //echo("<div class= 'row'> <div class ='col-sm-4' style= 'float:right'><h3 class='alert alert-success'><center>Total time worked: ". $timedurationstr." </center></h3></div></div>"); 

       ?> 

的型號代碼:

public function all_login($emp_id) 
{ 

    $startDate = new DateTime("first day of last month"); 
    $endDate = new DateTime("last day of last month"); 
    $this->db->select('*'); 
    $this->db->from('daily_data2'); 
    $this->db->where('users.emp_id',$emp_id); 
    $this->db->where('entry >','100'); 
    $this->db->where("date(date_data) BETWEEN '" . $startDate->format('Y-m-d') . "' AND '" . $endDate->format('Y-m-d') . "' ");             
    $this->db->order_by("date_data","ASC"); 
    $this->db->join('users', 'users.emp_id = daily_data2.emp_id','inner');  
    $query = $this->db->get(); 
    $res = $query->result();   
    return $res; 

} 




public function all_logout($emp_id) 
{ 


     $startDate = new DateTime("first day of last month"); 
     $endDate = new DateTime("last day of last month"); 
     $this->db->select('*'); 
     $this->db->from('daily_data2'); 
     $this->db->where('users.emp_id',$emp_id); 
     $this->db->where('entry <','100'); 
     $this->db->where("date(date_data) BETWEEN '" . $startDate->format('Y-m-d') . "' AND '" . $endDate->format('Y-m-d') . "' ");              
     $this->db->order_by("date_data","ASC"); 
     $this->db->join('users', 'users.emp_id = daily_data2.emp_id','inner'); 
     $query = $this->db->get(); 
     $res = $query->result();   
     return $res; 


} 

數組:

  array (size=21) 
     0 => 
      object(stdClass)[27] 
      public 'id' => string '1' (length=1) 
      public 'emp_id' => string '1' (length=1) 
      public 'name' => string 'Hiren' (length=5) 
      public 'last_name' => string 'Gada' (length=4) 
      public 'user_type' => string 'employee' (length=8) 
      public 'email' => string '[email protected]' (length=16) 
      public 'password' => string '55f32a0322e3b2f1bf8f41e20bd1dd075f50cfc2becc4fd9bc85ac10eea4bf0c5be3b00596f1d8b4fda6e5ab1c3c388bc28fdc0454bc260382be86613057f045' (length=128) 
      public 'phone' => string '9999999999' (length=10) 
      public 'gender' => string 'Male' (length=4) 
      public 'designation' => string 'CEO' (length=3) 
      public 'blood_group' => string '+ve' (length=3) 
      public 'date_birth' => string 'DD-MM-YYYY' (length=10) 
      public 'status' => string 'active' (length=6) 
      public 'address' => string 'DD-MM-YYYY' (length=10) 
     1 => 




    object(stdClass)[310] 
      public 'id' => string '2' (length=1) 
      public 'emp_id' => string '3' (length=1) 
      public 'date_data' => string '2015-12-01 18:20:15' (length=19) 
      public 'abc' => string '1' (length=1) 
      public 'def' => string '0' (length=1) 
      public 'entry' => string '101' (length=3) 
      public 'ghi' => string '0' (length=1) 
      public 'status' => string 'active' (length=6) 
      public 'name' => string 'Deepa' (length=5) 
      public 'last_name' => string 'Gada' (length=4) 
      public 'user_type' => string 'employee' (length=8) 
      public 'email' => string '[email protected]' (length=16) 
      public 'password' => string '108fae131090e2cd93d569050a105f5187a3a9c2e9fef0010f4acea30d999834d4c36cd0435550a42b8c98f9a7dcbfd05cb9b1428aa596a71b44e20879e233bb' (length=128) 
      public 'phone' => string '9999999999' (length=10) 
      public 'gender' => string 'Female' (length=6) 
      public 'designation' => string 'Sr. Software' (length=12) 
      public 'blood_group' => string '+ve' (length=3) 
      public 'date_birth' => string 'DD-MM-YYYY' (length=10) 
      public 'address' => string 'DD-MM-YYYY' (length=10) 




       object(stdClass)[1142] 
      public 'id' => string '20' (length=2) 
      public 'emp_id' => string '22' (length=2) 
      public 'date_data' => string '2015-12-11 07:34:22' (length=19) 
      public 'abc' => string '1' (length=1) 
      public 'def' => string '0' (length=1) 
      public 'entry' => string '101' (length=3) 
      public 'ghi' => string '0' (length=1) 
      public 'status' => string 'active' (length=6) 
      public 'name' => string 'Parveen' (length=7) 
      public 'last_name' => string 'Thakur' (length=6) 
      public 'user_type' => string 'employee' (length=8) 
      public 'email' => string '[email protected]' (length=18) 
      public 'password' => string '3eee66dbace42d2e671c52013e41de441b176dbaa0f7df33a5811b86c78b60ecb5328184bf1f5057f94817801140d7287f31c1fb06fa65550c356a33a8eec0db' (length=128) 
      public 'phone' => string '9999999999' (length=10) 
      public 'gender' => string 'Male' (length=4) 
      public 'designation' => string 'Support Staff' (length=13) 
      public 'blood_group' => string '+ve' (length=3) 
      public 'date_birth' => string 'DD-MM-YYYY' (length=10) 
      public 'address' => string 'DD-MM-YYYY' (length=10) 
+1

你或許應該在問題中添加陣列(或至少他們的一個例子) – RamRaider

+0

創建兩個字段s,開始時間,結束時間,更新開始時間字段在登錄時,(存儲日期時間)和在註銷存儲日期時間以及計算..建議... – devpro

+0

我想你想插入和更新每一個用戶在你的數據庫中的工作時間一個字段,並根據每個工作小時的每次更新,所以它存儲的所有用戶的工作時間,你會使用sql查詢求和,並獲得所有用戶的總工作時間 – jilesh

回答

2

嘗試這樣

foreach ($users as $user) 
{ 
    $emp_id = $user['emp_id']; 
    $name = $user['name']; 
    $attendances_logins = $this->attendance_m->all_login($emp_id); 
    $attendances_logouts = $this->attendance_m->all_logout($emp_id); 

    foreach ($attendances_logins as $key => $value) { 
     $loginTime = $value['login_time']; 
     $logoutTime = $attendances_logouts[$key]['logout_time']'' 

    } 

    $login_logout[] = array(
     'emp_id' => $emp_id, 
     'name' =>$name, 
     'hours' =>$hours, 
     'min' => $min, 
     'seconds' =>$seconds, 
     'login' => $attendances_logins, # Count number only 
     'logout' => $attendances_logouts # Count number only 
    ); 
} 
$this->data['logins'] = $login_logout 
// load view