Ответ @rand имеет ошибку, когда DateTime, которую мы хотим округлить, уже является 10-минутным кратным. Он будет прыгать через 10 минут, пока он не нужен.
Кроме того, всегда прыгать на следующую минуту с ($datetime->add(new \DateInterval("PT".(60-$second)."S"));
не требуется, если секунды уже на нуле.
Эта улучшенная функция исправляет эти ошибки и принимает параметр $ precision, чтобы охватить больше случаев использования.
function roundTime(\DateTime $datetime, $precision = 30) {
// 1) Set number of seconds to 0 (by rounding up to the nearest minute if necessary)
$second = (int) $datetime->format("s");
if ($second > 30) {
// Jumps to the next minute
$datetime->add(new \DateInterval("PT".(60-$second)."S"));
} elseif ($second > 0) {
// Back to 0 seconds on current minute
$datetime->sub(new \DateInterval("PT".$second."S"));
}
// 2) Get minute
$minute = (int) $datetime->format("i");
// 3) Convert modulo $precision
$minute = $minute % $precision;
if ($minute > 0) {
// 4) Count minutes to next $precision-multiple minutes
$diff = $precision - $minute;
// 5) Add the difference to the original date time
$datetime->add(new \DateInterval("PT".$diff."M"));
}
}
Эта функция теперь идеально подходит для моего использования и, возможно, для других людей.
проверить это http://php.net/manual/en/function.date.php –