我在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';
}
我该如何解决? 感谢
答案 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');