Подсчет продолжительности от нескольких строк

Мне нужно выяснить, сколько времени машина работает и находится в режиме ожидания. У меня есть записи в базе данных, например, так:

| machine | running | start               |
|---------|---------|---------------------|
| 1       | 0       | 2018-03-13 00:00:00 |
| 1       | 1       | 2018-03-13 00:30:00 |
| 1       | 0       | 2018-03-13 02:00:00 |

Настало время 2018-03-13 04:00:00, При использовании примера выше, результаты должны быть 01:30:00 (работает) и 02:30:00 (ожидание).

Каков наилучший способ сделать такой расчет? Достаточно ли хороши записи в моей базе данных?

Я использую такие инструменты, как Laravel в бэкэнде и f.ex. Vue и Moment.js во внешнем интерфейсе. Заранее спасибо.

0

Решение

Надеюсь, что это делает трюк:

<?php

$rs = [
[
'machine' => 1,
'running' => 0,
'start' => '2018-03-13 00:00:00'
],
[
'machine' => 1,
'running' => 1,
'start' => '2018-03-13 00:30:00'
],
[
'machine' => 1,
'running' => 0,
'start' => '2018-03-13 02:00:00'
],
[
'machine' => 1,
'running' => 1,
'start' => '2018-03-13 03:00:00'
],
];

$lastState = -1;
$startDateTime = $endDateTime = null;
$totalStates = count($rs);

foreach ($rs as $r)
{
$machine = $r['machine'];
$running = $r['running'];
$start = $r['start'];

if (-1 === $lastState) {
$startDateTime = new \DateTime($start);
$lastState = $running;
}
else {
$endDateTime = new \DateTime($start);
$dateTimeInterval = $endDateTime->diff($startDateTime);

echo "State: ". $lastState ." / Total time: " . $dateTimeInterval->format("%H:%I:%S") . "\n";

$startDateTime = new \DateTime($start);
$lastState = $running;
}
}

Выход:

State: 0 / Total time: 00:30:00
State: 1 / Total time: 01:30:00
State: 0 / Total time: 01:00:00
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]