繁体   English   中英

如何获得 php 中总时间的总和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM