Как округлить вверх / вниз до ближайших 10 или 5 минут DateTime в PHP

В некоторых приложениях для требовательных приложений со стандартизированными методологиями хранение объектов 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");
Ссылка на основную публикацию
Adblock
detector