PHP округляет время до ближайших 15 секунд

Это не повторяющийся вопрос, но требует небольшого понимания времени.

Мне нужно решение следующей проблемы
У меня есть несколько специально созданных времен (на основе даты), которые должны быть округлены до ближайших 15 секунд:

60 секунд это 1 минута
означает обычный круг, пол, потолок с точностью до десятичного знака (10/5)
что не помогает мне со временем.
также, поскольку я имею дело с секундами, может быть, что 59:59 будет округлено до ближайшего часа: например, 17:59:59 должно быть 18:00.

пример:

6:17:29 округлено до 6:17:30
6:29:55 округлено до 6:30:00
20:45:34 округлено до 20:45:30

Следующий код выполняет часть работы:

$hr = date('H',($resultStr));
$mn = date('i',($resultStr));
$sc = date('s',($resultStr));

$tot = ($hr * 60 * 60) + ($mn * 60) + $sc;
$totd = $tot / (60);
$totc = ceil($totd);
$totc = $totc / 60;
$hr = floor($totc);
$mn = ($totc - $hr)*60;
$mnflr = floor($mn);
$mn2 = $mn - $mnflr;
echo "$hr:$mnflr";

Это приводит к:
18:35:17 округлено до: 18:36 (что неверно)
18:31:49 округлено до: 18:32 (что неверно)

Как в сторону:

$secs = date('U',($resultStr));
$round = ceil ( (($secs / 60 ) * 60 ));
$newtime = date('H:i:s',($round));

производит: 18:42:58 округляется до: 18:42:58, что также неверно

Пожалуйста и заранее спасибо ….

3

Решение

Вы сильно усложняете это, просто выполните округление на уровне отметки времени Unix:

function roundMyTime($time)
{
$time = strtotime($time);
$time = 15*round($time/15);
echo date('H:i:s', $time)."\n";
}
roundMyTime('18:35:17');
roundMyTime('18:35:27');
roundMyTime('18:35:37');
roundMyTime('18:35:47');
roundMyTime('18:35:57');
roundMyTime('18:36:07');
roundMyTime('18:36:17');

Выходы:

18:35:15
18:35:30
18:35:30
18:35:45
18:36:00
18:36:00
18:36:15

Демо здесь.

5

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

$seconds = ($hr * 60 + $mn) * 60 + $sc; // convert to seconds
$rounded = round($seconds/15)*15;       // round
$sc = $rounded % 60;                    // get seconds
$mn = ($rounded - $sc) / 60 % 60;       // get minutes
$hr = ($rounded - $sc - $mn * 60) / 60; // get hours
0

Преобразовать дату в секунды, используя strtotime а затем просто работать в считанные секунды.

$seconds = strtotime($date);
$seconds /= 15;
$seconds = round($seconds);
$seconds *= 15;
$date = date("Y-m-d H:i:s", $seconds);
0
По вопросам рекламы [email protected]