PHPで日付の範囲を定義して1時間毎など任意の間隔で処理をしたい時、例えば2020年1月1日0時0分0秒から2020年1月2日0時0分0秒まで1時間毎にループを回して何か処理をしたい場合の書き方。
結論
<?php
$date_period = new DatePeriod(
date_create('2020-01-01 00:00:00'),
new DateInterval('PT1H'),
date_create('2020-01-02 00:00:00')->add(new DateInterval('PT1H'))
);
foreach($date_period as $date) {
echo($date->format('Y-m-d H:i:s') . "\n");
}
ここから実際に動かせます
http://sandbox.onlinephpfunctions.com/code/6590f911729eb743b45d73dbfafcc3eafd158581
解説
DatePeriod
DatePeriodクラスを使うと日付の期間を定義できます。
これがTraversableとなっているのでforeachが回せます。
結論のコードを見て分かる通り、引数の1番目に開始日時、3番目に終了日時をDateTimeで指定します。
2番目には間隔を指定しますが、これは後述のDateIntervalクラスで表現します。
終了日時に1時間追加しているのは最後の日時がループに含まれないためです。
DateInterval
DateIntervalクラスを使うと日付(ループ)の間隔を指定できます。
1時間毎はPT1H
と表現します。詳しくはこちらに書いてあります。