Если вам действительно нужно / хотите использовать DateTime
-объекты, вы можете манипулировать DateTime
-объектом с помощью modify
-метода на основе минут, а после этого обнулять секунды и микросекунды с помощью setTime
-метод.
// round (floor)
$date = new DateTime('2019-01-01T15:03:01.012345Z');
$i = $date->format('i') % 15;
$date->modify("-{$i} minute");
$date->setTime($date->format('H'), $date->format('i'), 0, 0);
var_dump($date);
// round (ceil)
$date = new DateTime('2019-01-01T15:03:01.012345Z');
$i = 15 - ($date->format('i') % 15);
$date->modify("+{$i} minute");
$date->setTime($date->format('H'), $date->format('i'), 0, 0);
var_dump($date);
Демо: https://3v4l.org/MIGiG
Этот подход имеет преимущество для правильной обработки времени, которое будет округлено до следующего дня.
Но если вам нужно только «округлить» простую строку, содержащую часы и минуты, тогда достаточно решения, включающего взрыв и простую математику (см .: Ответ опубликованной пантеры ).