php - 如何在laravel中添加来自数据库的时间
问题描述
[
{"duration":"00:01:46"},
{"duration":"00:01:23"},
{"duration":"00:01:56"},
{"duration":"00:03:20"},
{"duration":"00:05:41"},
{"duration":"00:02:08"}
]
[
{"duration":"00:01:32"},
{"duration":"00:03:31"},
{"duration":"00:05:56"},
{"duration":"00:03:56"},
{"duration":"00:03:47"},
{"duration":"00:03:38"},
{"duration":"00:02:26"}
]
这是来自我的数据库列持续时间的持续时间,现在我想添加/总和这些,以便我可以显示它。
解决方案
使用 DateTime,它的 add 方法与 DateInterval。
<?php
$a = '[
{"duration":"00:01:46"},
{"duration":"00:01:23"},
{"duration":"00:01:56"},
{"duration":"00:03:20"},
{"duration":"00:05:41"},
{"duration":"00:02:08"}
]';
$b = '[
{"duration":"00:01:32"},
{"duration":"00:03:31"},
{"duration":"00:05:56"},
{"duration":"00:03:56"},
{"duration":"00:03:47"},
{"duration":"00:03:38"},
{"duration":"00:02:26"}
]';
$dataA = json_decode($a);
$dataB = json_decode($b);
function sum(array $data): string {
$sum = new DateTime('00:00');
$start = new DateTime('00:00');
foreach ($data as $row) {
$parts = explode(':', $row->duration);
$start->add(new DateInterval(sprintf('PT%sH%sM%sS', $parts[0], $parts[1], $parts[2])));
}
return $start->diff($sum)->format('%H:%I:%S');
}
var_dump(sum($dataA));
var_dump(sum($dataB));
输出:
string(8) "00:16:14"
string(8) "00:24:46"
注意:如果您的持续时间总和超过 24 小时,您还必须显示天数。
推荐阅读
- java - 在国际象棋游戏中,棋子应该移动还是棋盘移动
- flutter - 如何从 Firestore 制作父/子对象流
- r - 计算两列都是 NA 的行,然后排除
- python - 如何使用数据存储模拟器检查正在运行的 dev_appserver.py
- c# - C1 CMS 友好的媒体网址?
- c++ - 使用向量增强 MSVC 的序列化(错误?)问题
在几个图书馆 - rdf - 如何在 Protege 中添加匿名个人?
- python - BertTokenizer - 编码和解码序列时出现额外空格
- branch.io - 跨设备匹配 _branch_match_id
- elasticsearch - 有没有办法在弹性中执行嵌套过滤而不影响文档是否匹配?