2016-08-26 3 views
-1

クロックアウトシステムでクロックを作成しようとしています。特定の日にユーザーが働いていた時間のレポートを取得しようとすると、私は働いた時間数を合計する必要があります。私はstartTime(タイムスタンプ)とendTime(タイムスタンプ)を持っていますが、私は任意の日に複数のエントリを持つことができます。php開始日から終了日までの総作業時間を取得します。

array 
    (
     [theUser] => Bob Johnson 
     [timeId] => 9 
     [user_id] => 1 
     [weekNo] => 34 
     [clockYear] => 2016 
     [entryDate] => 2016-08-21 
     [startTime] => 2016-08-21 21:57:01 
     [endTime] => 2016-08-21 22:45:15 
     [updated_at] => 2016-08-21 22:45:15 
     [totTime] => 00:48:14 
    ) 

    [9] => Array 
    (
     [theUser] => Bob Johnson 
     [timeId] => 16 
     [user_id] => 1 
     [weekNo] => 34 
     [clockYear] => 2016 
     [entryDate] => 2016-08-24 
     [startTime] => 2016-08-24 01:00:00 
     [endTime] => 2016-08-24 05:15:00 
     [updated_at] => 
     [totTime] => 04:15:00 
    ) 
    (
     [theUser] => Bob Johson 
     [timeId] => 15 
     [user_id] => 1 
     [weekNo] => 34 
     [clockYear] => 2016 
     [entryDate] => 2016-08-24 
     [startTime] => 2016-08-24 01:00:00 
     [endTime] => 2016-08-24 05:15:00 
     [updated_at] => 
     [totTime] => 04:15:00 
    ) 

    (
     [theUser] => Bob Johnson 
     [timeId] => 18 
     [user_id] => 1 
     [weekNo] => 34 
     [clockYear] => 2016 
     [entryDate] => 2016-08-24 
     [startTime] => 2016-08-24 09:59:00 
     [endTime] => 2016-08-24 10:45:00 
     [updated_at] => 2016-08-24 10:19:31 
     [totTime] => 00:46:00 
    ) 

は、私は誰もがしようとした場合服用してくださいこれを助けることができるこの

  (
       [theUser] = Bob Johnson 
       [weekNo] = 34 
       [Year] = 2016 
       [entryDate] = 2016-08-24 
       [totalHoursWorked] = 09:16:00 
       [overTime] = 01:16:00 
      ) 

ような何かを達成したいまとめ働いた総時間で新しい配列を作成する必要があり

  $startTime = strtotime($val['startTime']); 
      $endTime = strtotime($val['endTime']); 
      $tot += $endTime - $startTime; 

      echo date('H:i:s', $tot) 

はforeachループですが、私は常に間違った値を取得します

+0

私はあなたが配列を解析することでこれを行うことができると思いますが、このインスタンスでは、私はクエリでそれを行うように誘惑されると思いますエルフ。 – Strawberry

+0

'strtotime($ val ['startTime']);'コードの出力は何ですか?これは、フォーマットされた日付ではなく、UNIXのタイムスタンプです... – Cagy79

+0

はい、タイムスタンプです – Yeak

答えて

2

問題はあなたのlasですトンライン:echo date('H:i:s', $tot)

代わりgmdateを使用する必要があります。

echo gmdate('H:i:s', $tot); 

または単純な数学のコードでそれをフォーマット:などCarbonとしてライブラリを使用して

$hours = floor($init/3600); 
$minutes = floor(($init/60) % 60); 
$seconds = $init % 60; 

echo "$hours:$minutes:$seconds"; 
+0

これはありがとうございました – Yeak

0

は、あなたの計算のために、より便利になりますと書式設定

関連する問題