简体   繁体   中英

how to calculate total working hours for all users?

I have a code that takes two arrays :

Login array

Logout Array

and then my code finds difference between one login and logout, so that would be his working duration in office. So will calculate all the duration and will get total worked hours for a single user for each date. of month.

Now this does for only one user . How can i calculate every user's total duration and print it in view?

<?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>");

                ?>

the Model code:

 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;


}

The Arrays:

          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 'hiren@bizrtc.com' (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 'deepa@bizrtc.com' (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 'praveen@bizrtc.com' (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)

Try like this

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM