php - 如何从 foreach 总结小时/分钟
问题描述
我如何总结时间以返回小时/分钟。我需要将 IN 与 OUT 相加。因为人们可以多次来并开始。
表数据
| Day | Hour | Status |
|------------|----------|--------|
| 03/04/2021 | 19:45:05 | in |
| 03/04/2021 | 20:03:50 | out |
| 03/04/2021 | 20:04:34 | in |
| 03/04/2021 | 20:04:51 | out |
| 03/04/2021 | 21:04:59 | in |
| 03/04/2021 | 23:59:59 | out |
| 03/04/2021 | 22:08:07 | in |
| 03/04/2021 | 22:08:55 | out |
| 03/05/2021 | 14:46:32 | in |
| 03/05/2021 | 19:25:09 | out |
代码
foreach ($timesheets as $timesheet) {
$total -= strtotime($timesheet['hour']);
}
// Absolute value of time difference in seconds
$diff = abs($total);
// Convert $diff to minutes
$tmins = $diff / 60;
// Get hours
$hours = floor($tmins / 60);
// Get minutes
$mins = $tmins%60;
return "<b>$hours</b> hours and<b>$mins</b> minutes</b>";
数据数组
Array (
[0] => Array ( [0] => 2021-03-05 [1] => 19:25:09 [2] => out )
[1] => Array ( [0] => 2021-03-05 [1] => 14:46:32 [2] => in )
[2] => Array ( [0] => 2021-03-04 [1] => 22:08:55 [2] => out )
[3] => Array ( [0] => 2021-03-04 [1] => 22:08:07 [2] => in )
[4] => Array ( [0] => 2021-03-04 [1] => 23:59:59 [2] => out )
[5] => Array ( [0] => 2021-03-04 [1] => 21:04:59 [2] => in )
[6] => Array ( [0] => 2021-03-04 [1] => 20:04:51 [2] => out )
[7] => Array ( [0] => 2021-03-04 [1] => 20:04:34 [2] => in )
[8] => Array ( [0] => 2021-03-04 [1] => 20:03:50 [2] => out )
[9] => Array ( [0] => 2021-03-04 [1] => 19:42:05 [2] => in )
)
解决方案
您的数据看起来顺序相反。您可以按升序查询数据,也可以使用array_reverse()
.
$timesheets = array_reverse($timesheets);
然后,您可以与一起分组in
和计时。out
array_chunk()
$chunks = array_chunk($timesheets, 2);
然后你可以计算 和 之间的in
时间out
差array_map()
。
$diffs = array_map(function ($chunk) {
return strtotime($chunk[1][1]) - strtotime($chunk[0][1]);
}, $chunks);
并将时间差与 相加array_sum()
。
$sum = array_sum($diffs);
然后打印出时间。
$seconds = $sum % 60;
$minutes = ($sum / 60) % 60;
$hours = (int) ($sum / 3600);
echo "$hours hours $minutes minutes $seconds seconds";
推荐阅读
- haskell - 是什么导致了 cabal 中的这个模块(NumberTheory)安装错误?
- optimization - 如何使 scipy.odeint 更快?
- r - 将包含某个单词的字符串替换为该单词
- php - 如果使用 ftp_put 上传到远程服务器,则保留文件修改的时间戳
- python-3.x - 尝试/除外,返回尝试
- php - PHP脚本运行一次,即使在两台机器上
- c++ - 帮助一些代码:初始化变量
- list - 从 PYTHON 中的对齐文件类型创建所有序列的成对组合的函数
- sharepoint - 有没有办法始终指向共享点文件夹中的最新版本?
- java - OutputStreamManager.write 上的 Log4j2 线程阻塞