我有这个名为 time_track 的表:
+----+--------+---------------------+---------+
| id | emplid | ctimestamp | eventid |
+----+--------+---------------------+---------+
| 1 | 13 | 2016-06-02 03:41:41 | 1 |
+----+--------+---------------------+---------+
| 2 | 13 | 2016-06-02 09:04:49 | 2 |
+----+--------+---------------------+---------+
| 3 | 13 | 2016-06-02 10:03:13 | 1 |
+----+--------+---------------------+---------+
| 4 | 13 | 2016-06-02 13:21:23 | 2 |
+----+--------+---------------------+---------+
其中 eventid 1 = 开始工作
和 eventid 2 = 停止工作
。
考虑到工作时间是所有 eventid 的 1 和 2 之间的总小时数,我如何计算任何一天的小时数 - WHERE emplid = 13 AND Year(ctimestamp) = 2016 和 Month(ctimestamp) = 06 和 Day(ctimestamp) = 02
最佳答案
您也可以使用 PHP(而不是 SQL)来完成:
<?php
$data = array( array( "1","2016-06-02 03:41:41" ),
array( "2","2016-06-02 09:04:49" ),
array( "1","2016-06-02 10:03:13" ),
array( "2","2016-06-02 13:21:23" )
);
$hours = 0;
foreach ( $data as $row ) // PROCESS ALL ROWS FROM QUERY.
{ if ( $row[ 0 ] == "1" ) // IF CURRENT ROW IS START TIME
$start = strtotime( $row[ 1 ] );
else { $stop = strtotime( $row[ 1 ] ); // STOP TIME. CALCULATE.
$hours += ( $stop - $start ) / 3600;
}
}
echo $hours; // 8.6883333333333.
?>
您可以对结果进行四舍五入。
将以前的代码复制并粘贴到文件中,将其另存为 .PHP 并在浏览器中打开。请随意更改示例数据。
编辑:调用一个函数来计算所有小时数更容易:
<?php
function total_hours ( $data )
{ $hours = 0;
foreach ( $data as $row )
if ( $row[ "eventid" ] == "1" )
$start = strtotime( $row[ "ctimestamp" ] );
else { $stop = strtotime( $row[ "ctimestamp" ] );
$hours += ( $stop - $start ) / 3600;
}
return $hours;
}
$sample_data = array( array( "id" => 1,
"emplid" => 13,
"ctimestamp" => "2016-06-02 03:41:41",
"eventid" => 1 ),
array( "id" => 2,
"emplid" => 13,
"ctimestamp" => "2016-06-02 09:04:49",
"eventid" => 2 ),
array( "id" => 3,
"emplid" => 13,
"ctimestamp" => "2016-06-02 10:03:13",
"eventid" => 1 ),
array( "id" => 4,
"emplid" => 13,
"ctimestamp" => "2016-06-02 13:21:23",
"eventid" => 2 )
);
echo total_hours( $sample_data ); // 8.6883333333333.
?>
使用从查询中获得的 sql-result 作为参数调用此函数(并将 foreach
替换为 while ( $row = mysqli_fetch_array
)。
关于php - MySQL-PHP : Calculate total hours in a day between multiple events,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38127735/