php - MySQL-PHP : Calculate total hours in a day between multiple events

标签 php mysql date datetime

我有这个名为 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/

相关文章:

php - PHP 中对象的差异集合

php - 使用 PHP 不工作创建数据库记录

php - 无法在服务器上测试 PHP 文件

mysql - 如何加快对 mysql 表的搜索?

javascript - 如何允许编辑属性,例如在 PrestaShop 结帐时的颜色、尺码?

c++ - 连接器 c++ res->getBoolean 访问冲突

mysql - 我应该有一个表来获取下拉值还是为每个下拉列表创建多个表

php - 在 mysql 数据库中插入日期范围

java - 读取文件添加到文件夹的时间

iOS - 自动续订订阅到期