计算每 2 行的时间戳之间的时间

Calculate time between timestamps for each 2 rows

我有下面的 table 并且正如您在 table 中看到的那样,用户对每个休息都有一个 BREAK OUT 和 BREAK IN 条目,但我正在努力计算每次休息的时间。 你们能帮忙吗? 谢谢

ID  Name      Action     Datetime
 2  John Doe  BREAK OUT  2018-05-24 09:00:41
 3  John Doe  BREAK IN   2018-05-24 09:10:45
 4  John Doe  BREAK OUT  2018-05-24 13:00:49
 5  John Doe  BREAK IN   2018-05-24 13:30:52
 6  John Doe  BREAK OUT  2018-05-24 15:30:56
 7  John Doe  BREAK IN   2018-05-24 15:40:59

好吧,既然你没有真正说明如何获得这些数据以及你想在哪里显示结果,这里只是你如何获得你想要的东西:

function getDateDiff($breakOut, $breakIn) {
    $dateStart = new DateTime($breakOut);
    $dateEnd   = new DateTime($breakIn); 

    $dateDiff  = $dateStart->diff($dateEnd); 

    return $dateDiff->format("%H:%I:%S");
}

现在您只需要使用函数和 return 差异 :

2   John Doe    BREAK OUT   2018-05-24 09:00:41
3   John Doe    BREAK IN    2018-05-24 09:10:45

var_dump(getDateDiff("2018-05-24 09:00:41", "2018-05-24 09:10:45")); // '00:10:04'

4   John Doe    BREAK OUT   2018-05-24 13:00:49
5   John Doe    BREAK IN    2018-05-24 13:30:52

var_dump(getDateDiff("2018-05-24 13:00:49", "2018-05-24 13:30:52")); // '00:30:03'

6   John Doe    BREAK OUT   2018-05-24 15:30:56
7   John Doe    BREAK IN    2018-05-24 15:40:59

var_dump(getDateDiff("2018-05-24 15:30:56", "2018-05-24 15:40:59")); // '00:10:03'

所以如果你想在 PHP 循环中得到这些结果,也许你可以试试这个:

// your data array, I assume it looks like this since I have no info
$array(
    2 => array(
        "name" => "John Doe",
        "break" => "2018-05-24 09:00:41",
    ),
    3 => array(
        "name" => "John Doe",
        "break" => "2018-05-24 09:10:45",
    ),
    4 => array(
        "name" => "John Doe",
        "break" => "2018-05-24 13:00:49",
    ),
    5 => array(
        "name" => "John Doe",
        "break" => "2018-05-24 13:30:52",
    ),
    ...
); 

$array_break_time = array();
foreach ($array as $key => $data) {
    if ($key % 2 == 0) {
        if(isset($array[$key + 1])) {
            $array_break_time[] = getDateDiff($data["break"], $array[$key + 1]["break"])
        }
    }
}

输出为:

$array_break_time = array(
    0 => '00:10:04',
    1 => '00:30:03'
    ....
);

但是因为我没有更多的细节不知道它是否适合你的情况!

好吧,如果您想在 MySQL 中执行此操作,那么您可以使用这样的子查询。 1. 为您的员工提供个人 ID,并将他们的姓名存储在不同的 table 中,其中他们的员工 ID 是主键,table 他们的个人详细信息存储在其中。 2. 在这个 table 中只有员工 ID、休息时间和休息时间以及日期。 然后您可以使用此查询和 select 特定员工找出他们的休息时间。

select timediff((select breakout_time from table where employee_id = ? and date=?),(select breakin_time from table where employee_id = "same as above" and date="Same as above")) from dual;

欢迎编辑或更新。 希望这有帮助。

w=12=WILL.y.:w=11=w w=10=sh