[英]php sum time with variable in while loop
while循環中的php sum變量我必須“匯總”變量的值,而這里是我的例子:
while($row = mysql_fetch_array($result)){
$working_hour= $row[working_hour];
}
如果我輸入echo $working_hour;
上面的代碼將輸出echo $working_hour;
例如:01:00:03,01:03:04,01:10:15我想要類似:sum($ working_hour)或array_sum($ working_hour)來計算while循環的所有結果。 所以,我想算一下:01:00:03,01:03:04,01:10:15 = 03:13:22我這樣試試:
$total_working_hour=’00:00:00’;
while($row = mysql_fetch_array($result)){
$working_hour= $row[working_hour];
$total_working_hour+= $working_hour;
}
Echo $total_working_hour;
上面的代碼提供輸出為:
03
我怎么能用PHP做到這一點? 謝謝
我在這里使用了答案( 如何對數組時間求和 )並創建了以下函數:
function addTime($a, $b) {
$array = [$a, $b];
$totalTimeSecs = 0;
foreach ($array as $time) { // Loop outer array
list($hours,$mins,$secs) = explode(':',$time); // Split into H:m:s
$totalTimeSecs += (int) ltrim($secs,'0'); // Add seconds to total
$totalTimeSecs += ((int) ltrim($mins,'0')) * 60; // Add minutes to total
$totalTimeSecs += ((int) ltrim($hours,'0')) * 3600; // Add hours to total
}
$hours = str_pad(floor($totalTimeSecs / 3600),2,'0',STR_PAD_LEFT);
$mins = str_pad(floor(($totalTimeSecs % 3600) / 60),2,'0',STR_PAD_LEFT);
$secs = str_pad($totalTimeSecs % 60,2,'0',STR_PAD_LEFT);
return "$hours:$mins:$secs";
}
所以你可以使用它並替換
$total_working_hour+= $working_hour;
同
$total_working_hour = addTime($total_working_hour, $working_hour);
$hours=0;$min=0;$sec=0;
while($row = mysql_fetch_array($result)){
$working_hour= $row[working_hour];
$arr=explode(':',$working_hour);
$hours=$hours+$arr[0];
$min=$min+$arr[1];
if($min>60){$hours++;$min=$min-60;}
$sec=$sec+$arr[2];
if($sec>60){$min++;$sec=$sec-60;}
}
echo 'Total working hours='.$hours.':'.$min.':'.$sec;
$row["working_hour"]
值顯然是一個字符串。 所以說"01:00:03" + "01:03:04"
顯然毫無意義。 PHP假定您要做的是先將字符串轉換為整數然后將它們一起添加。 結果不是你真正追求的。
相反,您希望將類似"01:00:03"
的字符串轉換為規范化的整數值,例如秒數,可以將它們一起添加,然后轉換回字符串值。
因此,要將字符串的規范化值以秒為單位得到整數,您需要這樣的函數...
function convertStringToNumSeconds($string) {
list($hours, $minutes, $seconds) = explode(":", $string, 3);
$totalSeconds = 0;
$totalSeconds += $hours * 3600; // There are 3600 seconds in an hour
$totalSeconds += $minutes * 60; // There are 60 seconds in a minute
$totalSeconds += $seconds; // There is 1 second in a second
return $totalSeconds;
}
然后將秒轉換回格式化的字符串,你可以做相反的事情......
function secondsToString($seconds) {
$hours = (int) floor($seconds / 3600);
$seconds -= $hours * 3600;
$minutes = (int) floor($seconds / 60);
$seconds -= $minutes * 60;
return sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds);
}
現在在你的循環中你可以實際做這樣的事情......
$totalWork = 0;
while($row = mysql_fetch_array($result)){
$totalWork += convertStringToNumSeconds($row["working_hour"]);
}
echo secondsToString($totalWork); // You should get your expected result
如果您的示例中的格式是修復的,您可以使用DateTime-Object和Date-Interval,就像這樣......(有關DateInterval的更多信息,請查看PHP-Docu)
$dt = new \DateTime('00:00:00');
foreach ($dbRows as $row) {
$time = $row['working_hour'];
$timeSplit = explode(':', $time);
$interval = new \DateInterval(
'P0Y0DT'.$timeSplit[0].'H'.
$timeSplit[1].'M'.$timeSplit[2].'S'
);
$dt->add($interval);
}
echo $dt->format('H:i:s'); // Output: 03:13:22
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.