在while循环中进行计算

时间:2012-02-02 19:28:20

标签: php

我在WHILE循环中有以下变量:

    $row['To'];
    $row['From'];

那些代表时间,例如:

$row['To'] ="10:00:00";
 $row['From'] = "08:00:00";

在正常计算中,我将执行以下操作以获得不同的小时数:

 $result = (strtotime($row['To']) - strtotime($row['From']));
   $hours      = floor($result / 60 / 60);
   $minutes    = round(($result - ($hours * 60 * 60)) / 60);

问题是现在我必须在while循环中执行,其中$ row ['to']和$ row ['From']必须在循环指令的所有时间计算...但我无法得到它工作。这就是我试过的:

function calculateHours($project, $worker, $year, $month) {
if($project) {
$q='SELECT * FROM project_timeline WHERE ID="'.$project.'" AND Year(Date) = "'.$year.'" AND Month(Date) = "'.$month.'" AND WorkerID="'.$worker.'"';
 }else{
$q='SELECT * FROM project_timeline WHERE Year(Date) = "'.$year.'" AND Month(Date) = "'.$month.'" AND WorkerID="'.$worker.'"';
 }
 $r=mysql_query($q) or die(mysql_error());   
   while($row = mysql_fetch_array($r)) {
    $result .= (strtotime($row['To']) - strtotime($row['From']));
   }
    $hours      = floor($result / 60 / 60);
    $minutes    = round(($result - ($hours * 60 * 60)) / 60);
 return $hours.' hour(s) and '.$minutes.' minutes';
}

我该如何解决? 感谢

3 个答案:

答案 0 :(得分:1)

为什么使用.=计算PHP中的数字(时间),这是字符串添加,添加数字时使用+=

只是为了聪明的代码 - 将$result = 0;放在函数的开头

PS。也可以使用% -

代替楼层
$result     = round($result / 60);
$minutes    = $result % 60;
$hours      = ( $result - $minutes ) / 60;

答案 1 :(得分:0)

return循环中使用while()将在第一次迭代时终止循环,并且只生成从数据库中获取的第一行数据的结果。

答案 2 :(得分:0)

我会使用DateTime类:

// other function code here...

$from = new DateTime($row['From']);
$to   = new DateTime($row['To']);
$diff = $from->diff($to);

return $diff->format('%h hour(s) and %i minutes');