2017-01-24 2 views
-1

は、ここにあなたがそこに見ることができるように、ここでデータ私は開始時間をシフトするに従って、従業員のすべての非稼働時間を計算し、そのすべての時間を開始&終了したいのいずれかのphpで

Shift Start Time======== 07:00:00 
Shift End Time========== 15:00:00 
Array 
(
    [0] => stdClass Object 
     (    
      [startTime] => 07:00:00 
      [endTime] => 07:50:00 
      [elapsed_mins] => 50     
     ) 
[1] => stdClass Object 
    (      
     [startTime] => 08:50:00 
     [endTime] => 09:50:00 
     [elapsed_mins] => 20 

    ) 
[2] => stdClass Object 
    (   
     [startTime] => 09:50:00 
     [endTime] => 10:10:00 
     [elapsed_mins] => 20   
    )) 

である第一の時間を働いていましたシフトスタートと同じ 時間はそうですが、2番目のレコードでは7:50:00 から08:50:00までのギャップがありますので、この非作業レコードも同じ配列に入れてください 最後に2番目のオブジェクトとして 10:10:00から15:00:00(シフト終了時刻)の後にレコードがないことがわかりますので、このレコードもに入れてください3210は同じ配列です。最後に配列に5つの要素があるはずです。 助けてください。

上記の質問によると、望ましい結果が得られるはずです。

Array 
(
    [0] => stdClass Object 
     (    
      [startTime] => 07:00:00 
      [endTime] => 07:50:00 
      [elapsed_mins] => 50     
     ) 
[1] => stdClass Object 
     (    
      [startTime] => 07:50:00 
      [endTime] => 08:50:00 
      [elapsed_mins] => 60     
     ) 
[2] => stdClass Object 
    (      
     [startTime] => 08:50:00 
     [endTime] => 09:50:00 
     [elapsed_mins] => 60 

    ) 
[3] => stdClass Object 
    (   
     [startTime] => 09:50:00 
     [endTime] => 10:10:00 
     [elapsed_mins] => 20   
    ) 
[4] => stdClass Object 
    (   
     [startTime] => 10:10:00 
     [endTime] => 15:00:00 
     [elapsed_mins] => 290   
    ) 
) 
+0

これまでに試したことはありますか?ここにあなたのコードを投稿してください –

+0

あなたはデータを提供しました。コードも入力してください。 –

+0

合計時間またはすべての詳細も配列に入れたいですか? –

答えて

0

これは、出力の下に戻ります、ご希望の出力

$shift_start_time = '07:00:00'; 
$shift_end_time = '15:00:00'; 

$i    = 0; 
$last_end_time = $shift_start_time; 
foreach ($array as $key => $value) 
{ 
    if ($last_end_time != $value->startTime) 
    { 
     $sTime = $last_end_time; 
     $eTime = $value->startTime; 
     $elapsed = (strtotime($eTime) - strtotime($sTime))/60; 
     array_splice($array, $i, 0, (object) array(array('startTime' => $sTime, 'endTime' => $eTime, 'elapsed' => $elapsed))); 
    } 
    $last_end_time = $value->endTime; 
    $i++; 
} 

$last_worked = end($array); 

if ($last_worked->endTime !== $shift_end_time) 
{ 
    $startTime = $last_worked->endTime; 
    $endTime = $shift_end_time; 
    $elapsed = (strtotime($endTime) - strtotime($startTime))/60; 

    $array[] = (object) array('startTime' => $startTime, 'endTime' => $endTime, 'elapsed' => $elapsed); 
} 


var_dump($array); 

をごとにカスタムコードを作成している

array (size=5) 
    0 => 
    object(stdClass)[1] 
     public 'startTime' => string '07:00:00' (length=8) 
     public 'endTime' => string '07:50:00' (length=8) 
     public 'elapsed_mins' => string '50' (length=2) 
    1 => 
    object(stdClass)[2] 
     public 'startTime' => string '07:50:00' (length=8) 
     public 'endTime' => string '08:50:00' (length=8) 
     public 'elapsed_mins' => string '60' (length=2) 
    2 => 
    object(stdClass)[3] 
     public 'startTime' => string '08:50:00' (length=8) 
     public 'endTime' => string '09:50:00' (length=8) 
     public 'elapsed_mins' => string '60' (length=2) 
    3 => 
    object(stdClass)[4] 
     public 'startTime' => string '09:50:00' (length=8) 
     public 'endTime' => string '10:10:00' (length=8) 
     public 'elapsed_mins' => string '20' (length=2) 
    4 => 
    object(stdClass)[5] 
     public 'startTime' => string '10:10:00' (length=8) 
     public 'endTime' => string '15:00:00' (length=8) 
     public 'elapsed' => int 290 

ご注意ください:ご質問を投稿する前に、あなた自身でコードを投稿してください。あなたのコード内の問題を解決するのを手伝ってくれる人がいます。コード全体を作成する手助けはしません。

+0

助けてくれてありがとう。 Nishant。 しかし、それは最後のオブジェクトだけを配列に追加します。それは2番目(インデックス)のオブジェクトでどのように動作するのでしょうか?07:50:00から08:50:00までのギャップもあります。 – JayKay

+0

あなたが歓迎されている –

+0

の編集を確認してください..答えを投票することを検討してください..ありがとう –

0

論理を説明するだけで、構文を適切にすることができ、要件ごとに複数のループを作成することができます。

シフト開始時間========七時00分00秒 シフト終了時刻の午前15時00分00秒==========

今最初に必要な合計時間を計算しますシフト時間のために

$TotalWorkingTime = ($endShiftTime - $ShiftStartTime)* 60 ; // 60 for converting into the min 

$totalHourEmp = Array 
        (
         [0] => stdClass Object 
          (    
           [startTime] => 07:00:00 
           [endTime] => 07:50:00 
           [elapsed_mins] => 50     
          ) 
        [1] => stdClass Object 
         (      
          [startTime] => 08:50:00 
          [endTime] => 09:50:00 
          [elapsed_mins] => 20 

         ) 
        [2] => stdClass Object 
         (   
          [startTime] => 09:50:00 
          [endTime] => 10:10:00 
          [elapsed_mins] => 20   
         )) ; 


// Loop for the employee hours worked 

$hourworked = 0 ; 
for($cnt = 0 ; $cnt < count($totalHourEmp) ; $cnt ++) 
{ 
    $hourworked = $hourworked + (($totalHourEmp[$cnt]['endTime'] - $totalHourEmp[$cnt]['startTime']) * 60) 
} 

$totalNONworkingHours = $TotalWorkingTime - $hourworked; 
+0

回答者のおかげで、私の望む結果は上に述べたとおりです。 – JayKay

+0

さて、以前のアレイの終了時間を取って残りの時間を調べる必要があります –

+0

はい私は同じことをしていましたが、それを行うことができませんでした。助けてください – JayKay

関連する問題