[英]How to calculate sum total of a column with 'time' structure and display it in php table?
[英]how to get sum of the total time in php
目前我正在使用考勤管理系统。我计算员工完成了多少小时的工作。我已经计算了一天工作了多少小时,并将其存储在 mysql 数据库中。
$totaltime = (strtotime($time_out) - strtotime($time_in));
$hours = sprintf('%02d', intval($totaltime / 3600));
$seconds_remain = ($totaltime - ($hours * 3600));
$minutes = sprintf('%02d', intval($seconds_remain / 60));
$seconds = sprintf('%02d' ,($seconds_remain - ($minutes * 60)));
$final = '';
if ($time_in == '' || $time_out == '')
{
$final = '';
}
else
{
$final .= $hours.':'.$minutes.':'.$seconds;
}
例如
$time_in = 08:09:57
$time_out = 16:04:50
$final = 07:54:53 (total working hours)
现在我想获得每个员工当月的总工作时间。如何使用 php 获得 $final 的总和? month_data 的样本数据
Emp_no Date Time_in Time_out Total_hours TranID
23 2019-08-01 07:54:40 16:01:40 08:07:00 1
23 2019-08-02 07:42:35 16:02:53 08:20:18 2
我想获得相关一名员工的 Total_hours 总和
如果您问我可以使用简单的MySQL轻松完成此操作,那么PHP就无需计算了。
您可以看一下这样的查询
SELECT SEC_TO_TIME(SUM(`Total_hours`) ) FROM `month_data` GROUP BY `Emp_no`;
有一个简单的SUM
函数可以为您完成此操作,但它会以秒为单位返回总时间。
为了将其转换为可读的时间,您可以使用MySQL函数SEC_TO_TIME
。
编辑
如果所说的列不是TIME
列,则可以使用CAST()
将该类型的列进行CAST()
处理,所需的SQL看起来像
SELECT SEC_TO_TIME(SUM(CAST(`Total_hours` AS TIME)) ) FROM `month_data` GROUP BY `Emp_no`;
我的建议是将列类型更改为TIME
。
编辑2
我当时假设SUM()
足够聪明,可以将时间转换为秒,并给出给定时间的正确总和。
不知道为什么,但是不是这样,因此您需要首先将给定的时间转换为秒。
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(`Total_hours`)) ) FROM `month_data` GROUP BY `Emp_no`;
现在,我还没有对此进行测试,但是TIME_TO_SEC()
似乎可以接受VARCHAR
,因此需要再对该列进行CAST()
。
看看这个:
echo OverallTime($allTimes);
$allTimes = array();
function OverallTime($allTimes) {
$minutes = 0;
foreach ($allTimes as $time) {
list($hour, $minute) = explode(':', $time);
$minutes += $hour * 60;
$minutes += $minute;
}
$hours = floor($minutes / 60);
$minutes -= $hours * 60;
return sprintf('%02d:%02d', $hours, $minutes);
<?php
$total = [
'00:02:55',
'00:07:56',
'01:03:32',
'01:13:34',
'02:13:44',
'03:08:53',
'03:13:54'
];
$sum = strtotime('00:00:00');
$sum2=0;
foreach ($total as $v){
$sum1=strtotime($v)-$sum;
$sum2 = $sum2+$sum1;
}
$sum3=$sum+$sum2;
echo date("H:i:s",$sum3);
?>
如果这对寻找这个的人有用,这就是我在我的音乐网站上使用的。 此代码获取专辑中所有歌曲的持续时间(以秒为单位),将它们相加,并以 hh mm ss 为单位返回专辑总长度。
$record_id = $this->record->id; <!--variable for record-->
.$query = 'SELECT SUM(duration) FROM #__songs WHERE `record_id` = '. $db->quote( (int) $record_id ); <!--selects the duration of all the songs in the album-->
$db->setQuery($query);
$results = $db->loadResult();
echo gmdate("H:i:s", $results); <!--echo total time in hh mm ss.-->
这里不是专家。 如果你看到了什么,说点什么XD
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.