オプションはDateTime::setTime()
、少しの算術でメソッドを使用することです。
$date = new DateTime('12:34', new DateTimeZone('Europe/Paris'));
$minute = ceil(($date->format('i') - 7 + 1) / 10) * 10 + 7;
$date->setTime($date->format('G'), $minute, 0);
echo $date->format('H:i'); // 12:37
デモンストレーション目的で、ループで使用する例:
$date = new DateTime('16:00', new DateTimeZone('Europe/Paris'));
$period = new DatePeriod($date, new DateInterval('PT1M'), 60);
foreach ($period as $date) {
echo $date->format('H:i => ');
$minute = ceil(($date->format('i') - 7 + 1) / 10) * 10 + 7;
$date->setTime($date->format('G'), $minute, 0);
echo $date->format('H:i'), PHP_EOL;
}
上記の出力は次のようになります。
16:00 => 16:07
16:01 => 16:07
16:02 => 16:07
16:03 => 16:07
16:04 => 16:07
16:05 => 16:07
16:06 => 16:07
16:07 => 16:17
16:08 => 16:17
16:09 => 16:17
16:10 => 16:17
... removed to save scrolling ...
16:50 => 16:57
16:51 => 16:57
16:52 => 16:57
16:53 => 16:57
16:54 => 16:57
16:55 => 16:57
16:56 => 16:57
16:57 => 17:07
16:58 => 17:07
16:59 => 17:07
17:00 => 17:07
» オンラインで実行されているこの例を見る