2015-07-02 5 views
0

Я пытаюсь создать трекер навыков, который показывает, как долго пользователь работал над обучением определенного навыка. В результате у меня есть цикл while, который проходит через все в моей базе данных, но я зациклился на том, как получить разницу между двумя раз для каждой итерации в цикле. Они отформатированы как H: m: s через 12 часов (например, 09:05:00).Временная разница PHP

Например, допустим, что я работал над двумя навыками на дату 7/2/15. Результат должен выглядеть следующим образом:

| Skill Name | Time Started | Time Finished | Difference | 
| ---------- | ------------ | ------------- | ---------- | 
| Bootstrap | 9:05:00 AM | 11:15:00 AM | 2:10:00 | 
| CSS  | 10:50:00 PM | 11:50:00 PM | 1:00:00 | 
| Python  | 10:00:00 AM | 1:00:00 PM | 3:00:00 | 

Вот мой код (извините устаревшие заявления Это будет использоваться только со мной.): ​​

 $skilltoview = $_POST['skilltoview']; 

     include("db.php"); 

     //retrieve data from database 
     $result = mysql_query("SELECT * FROM timer WHERE skillname='$skilltoview'"); 


     echo "<div class='table-responsive'>"; 
     echo "<table class='table table-striped table-bordered'>"; 
     echo "<thead>"; 
     echo "<tr>"; 
     echo "<th>ID</th><th>Skill Name</th><th>Skill Date</th><th>Time Started</th><th>Time Ended</th><th>Notes</th><th>Difference</th>"; 
     echo "</tr></thead>"; 
     echo "<tbody>"; 

     function timeDifference($timeEnd, $timeStart){ 
     $tResult = strtotime($timeEnd) - strtotime($timeStart); 
     return date("G:i", $tResult); 
     } 


    while($row = mysql_fetch_array($result)){ 
     $id = $row['id']; 
     $start = $row['timestarted']; 
     $stop = $row['timestopped']; 

     echo " 
     <tr> 
      <td>$id</td> 
      <td>$row[skillname]</td> 
      <td>$row[date]</td> 
      <td>$row[timestarted]</td> 
      <td>$row[timestopped]</td> 
      <td>$row[notes]</td> 
      <td>"; print(timeDifference($start, $stop)); echo "</td> 
      <td><a href ='edittracker.php?id=$id'>Edit</a> 
      <td><a onClick='deleteConfirm(); return false;' href='#'><center>Delete</center></a></a> 
     </tr>"; 

     echo "<script type='text/javascript'> 
     function deleteConfirm(){ 
     var r = confirm('Are you sure you want to delete this skill log?'); 
     if (r == true) { 
     window.location='deletetracker.php?id=$id'; 
     } else { 
      x = 'You pressed Cancel!'; 
     } 
     } 
     </script>"; 
    } 
     echo "</tbody>"; 
     echo "</table>"; 
     echo "</div>"; 

     //close connection 
     mysql_close($conn); 
+0

Какой выход, что вы получаете, чтобы мы могли сравнить с тем, что вы хотите. –

+0

@Brian Cohan: Это самая странная вещь, но она возвращает '0: 59' как разницу, независимо от того, какое время передается функции. – hikaru12

+1

Вы можете сделать запрос вычислить разницу во времени для вас ... например. '" SELECT timestarted, timestopped, timestopped-timestarted AS timeelapsed FROM timer WHERE skillname = '$ skilltoview' "' –

ответ

1

Независимо от того, что случилось с PHP-кодом, вы можете сделать так, чтобы ваш сервер базы данных вычислил разницу так же легко; использовать TIMEDIFF и добавить, что к вашему запросу:

SELECT *, TIMEDIFF(timestopped, timestarted) as diff FROM timer WHERE skillname='$skilltoview' 

вы можете распечатать <td>$row[diff]</td> непосредственно

+0

@ hikaru12 - разделите его на 3600 –

+0

@ Sjon: Нравится? '$ diffhour = $ row ['diff']/3600;' – hikaru12

+0

@Sjon, также имеющий проблемы при переходе от AM к PM. Например, если я делаю «10:00:00 AM» и останавливается как «1:30:00 PM», я получаю остаток дня, оставшийся с 24-часового времени '-08: 30: 00'. В любом случае, чтобы это исправить? – hikaru12

Смежные вопросы