2016-07-25 10 views
0

私は、正しい時間を表示するために働いていた時間を得ることに少し問題がありました。ここで2回の間に正しい差を表示

私が使用していたコードです:あなたは番目のレコードは-17.50時間を出力しているが、労働時間は6.5時間でなければなりません気付いた場合

<?php while($row = $approvedTimes->fetch()){ ?> 
    <tr> 
     <td><?php echo $row['userFirst'] . " ". $row['userLast']; ?></td> 
     <td><?php echo $row['companyName']; ?></td> 
     <td><?php echo date('Y-M-d',strtotime($row['timeDate'])); ?></td> 
     <td><?php echo date("h:i a",strtotime($row['timeStart'])); $start = $row['timeStart']; ?></td> 
     <td><?php echo date("h:i a",strtotime($row['timeEnd'])); $end = $row['timeEnd'] ; ?></td> 
     <td><?php echo $row['timeBreak'] . " min."; $break = $row['timeBreak']; ?></td> 
     <td><?php $hours = strtotime($end) - strtotime($start) -($break*60) ; echo number_format($hours/3600,2, '.', '') . " hours"; ?></td> 
    </tr> 
    <?php } ?> 

。私は問題はそれが秒で両方の時間を見ていると思うが、私は開始時刻と終了時刻に基づいて正しい時間を表示するためにそれを変更する方法がわからない。 strtotime日付の変更を見ているように、互いからフルタイムスタンプを引く

Time Table with error

+0

strtotime()に完全な日付/時刻を指定する必要があります。日付を省略すると、「今日」とみなされます。午後5時30分は午前12時30分ですので、私は彼が次の日に終了したと仮定しています –

答えて

0
あなたは以下のショー限り、手計算を必要とせずにそれを達成するために DateTime()DateIntervalクラスを使用することができます。

注:(30または60、例えば):これは $row['timeStart']$row['timeEnd']2016-07-23 08:15:30のような有効な日付フォーマット文字列であり、またその $row['timeBreak']が休憩のため が言うであることを前提としています。
<?php while($row = $approvedTimes->fetch()){ ?> 
     <tr> 
      <?php 
       $start  = new DateTime($row['timeStart']); 
       $end  = new DateTime($row['timeEnd']); 
       $breakTime = new DateInterval('PT'. $row['timeBreak'] .'M'); 

       // SUBTRACT THE BREAK TIME (IN MINUTES) FROM THE WORK-END TIME: $end 
       $end  = $end->sub($breakTime); 

       // GET THE DIFFERENCE BETWEEN WORK-START TIME:$start & WORK-END TIME: $end 
       $timeDiff = $end->diff($start); 

       // BUILD A STRING TO REPRESENT THE DIFFERENCE USING SOME DateInterval METHODS. 
       $strDiff = $timeDiff->h . " Hours, " . $timeDiff->i . " Minutes &amp; " . $timeDiff->s . " Seconds"; 
      ?> 
      <td><?php echo $row['userFirst'] . " ". $row['userLast']; ?></td> 
      <td><?php echo $row['companyName']; ?></td> 
      <td><?php echo date('Y-M-d', strtotime($row['timeDate'])); ?></td> 
      <td><?php echo date("h:i a", strtotime($row['timeStart'])); ?></td> 
      <td><?php echo date("h:i a", strtotime($row['timeEnd'])); ?></td> 
      <td><?php echo $row['timeBreak'] . " min."; ?></td> 
      <td><?php echo $strDiff; /* ECHO OUT THE TOTAL HOURS WORKED...*/ ?></td> 
     </tr> 
    <?php } ?> 
-1

これは、テーブルのI出力です。

+0

理由を説明していただきありがとうございます。 – VikingBlooded

0

ので、可能性はありません短い答えは、あなたがこのようなものを使用する必要があります:

$hours = strtotime($row['timeEndDate']." ".$row['timeEnd']) 
- strtotime($row['timeStartDate']." ".$row['timeStart']) 
-($break*60); 

をしかし、あなたはあまりにも終了時刻dateを収集する必要があります!

Lars Stegelitzコメント:期間は多分一晩です!

変更する前に、timeStarttimeEndを時間の代わりに完全な日時として収集することを検討してください。

あなたは現在のテーブルでこれを行うにしたい場合は、あなたのようなaddionalチェック行う必要があります。終了時間と開始時間が大きいが、その後(当日のプラスとのstrtotime())その上で反応

How do I find the hour difference between two dates in PHP?

Calculate number of hours between 2 dates in PHP

関連する問題