Как совместить минуты с таймблоком

На заднем плане запускается скрипт, который проверяет, доступен ли кто-то. Затем этот скрипт вставляет значение в базу данных. У меня нет контроля над этим сценарием. Вывод следующий:

12:01:00
12:02:00
12:03:00
12:10:00
12:11:00
12:12:00
12:13:00
12:14:00
12:15:00

так далее

Теперь мне нужно сгруппировать эти данные с помощью PHP, чтобы я получил первые и последние данные последовательных строк. Так что в этом случае мне нужны следующие данные:

12:01:00
12:03:00
12:10:00
12:15:00

Я искал этот форум и Google, но, возможно, мой английский недостаточно хорош, чтобы найти ответ. Я пробовал разные идеи (например, сравнивая время с предыдущим временем, но каждый раз, когда я получал неожиданные или не работающие результаты).

0

Решение

  1. Прочитайте строку времени и установите ее в начало и конец периода времени.
  2. Прочитайте следующую строку времени.
  3. Вычислите разницу между временными строками и, если она меньше 00:01:00, продлите период времени. Если это больше 1 минуты, выведите период времени и начните новый период времени. Перейти к 2.

Когда вы используете mtkime () и date (), вы должны вызывать

date_default_timezone_set('UTC');

Ниже приведен пример кода. Данные хранятся в массиве в виде строк.

date_default_timezone_set('UTC');

$arr = array(
'12:01:00',
'12:02:00',
'12:03:00',
'12:10:00',
'12:11:00',
'12:12:00',
'12:13:00',
'12:14:00',
'12:15:00'
);

// Start of code sample
$firsttime = true;
$start_time = '';
$end_time = '';
foreach ($arr as $time) {
if ($firsttime === true) {  // start of a new time range
// above test can be changed to $start_time === '' && $end_time === ''
$firsttime = false;
$start_time = $time;
$end_time = $time;
} else {
$diff = diff_time($end_time, $time);
// insert error check here
if ($diff <= '00:01:00') {  // consecutive
$end_time = $time;  // update end of the time range
} else {    // end of the time range
echo $start_time, '<br />';
echo $end_time, '<br />';
$start_time = $time;
$end_time = $time;
}
}
}
if ($start_time !== '' && $end_time !== '') {
echo $start_time, '<br />';
echo $end_time, '<br />';
}
echo 'End<hr />';

function diff_time($from_time, $to_time) {
if (preg_match('/([0-9]+):([0-9]+):([0-9]+)/', $from_time, $captured)) {
$from = mktime($captured[1], $captured[2], $captured[3], 1, 1, 2000);
} else {
return false;
}
if (preg_match('/([0-9]+):([0-9]+):([0-9]+)/', $to_time, $captured)) {
$to = mktime($captured[1], $captured[2], $captured[3], 1, 1, 2000);
} else {
return false;
}
if ($from > $to) {
return date('-H:i:s', $from - $to);
} else {
return date('H:i:s', $to - $from);
}
0

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

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

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