В некоторых приложениях для требовательных приложений со стандартизированными методологиями хранение объектов DateTime в базе данных является абсолютным искусством. Но в каком смысле? Они должны храниться в каком-то конкретном формате, заботясь о точности и строгости. Давайте возьмем в качестве примера приложение планировщика, которое отображает события в блоках по 5 минут, этот календарь принимает только время события в таком формате, например, 5:25, 6:45 и т. Д. Если отображается другое время, календарь потерпит неудачу, поэтому на стороне сервера, чтобы обеспечить правильный формат времени. С помощью класса DateTime PHP довольно легко изменить дату, однако было бы не очень интуитивно округлять время объекта DateTime с некоторым интервалом, например, 5 или 10 минут.
В этой статье мы расскажем вам о трех методах, которые помогут вам с легкостью округлить время объекта DateTime до ближайшего интервала, наибольшего или минимального.
Заметка
По умолчанию все три метода имеют интервал 10 минут, вы можете изменить его, как хотите, например, 5, 20 и т. Д. Просто измените интервал в качестве второго аргумента функций, и все!
Округление до ближайшего интервала
Следующая функция округляет минуты объекта datetime до ближайшего заданного интервала:
setTime(
$dateTime->format('H'),
round($dateTime->format('i') / $minuteInterval) * $minuteInterval,
0
);
}
И это можно использовать так:
format("Y-m-d H:i:s");
Или в случае, если минуты объекта datetime ниже, чем самый высокий интервал, будет использоваться более низкий:
format("Y-m-d H:i:s");
Округление до максимума
Следующая функция округляет минуты объекта datetime до максимального заданного интервала:
setTime(
$dateTime->format('H'),
ceil($dateTime->format('i') / $minuteInterval) * $minuteInterval,
0
);
}
И это можно использовать так:
format("Y-m-d H:i:s");
Округление до минимума
Следующая функция округляет минуты объекта datetime до минимального заданного интервала:
setTime(
$dateTime->format('H'),
floor($dateTime->format('i') / $minuteInterval) * $minuteInterval,
0
);
}
И это можно использовать так:
format("Y-m-d H:i:s");