php の日付範囲を求めるにはDatePeriodを使うと便利
DatePeriod にスタートと、終了、そして間隔を追加すると日付範囲のオブジェクトが出来る。
<?php #(PHP 5 >= 5.3.0, PHP 7) DatePeriod implements Traversable {
DatePeriodは Traversable なので、foreach などに入る配列オブジェクトとして扱える。
日付範囲を扱う
<?php function date_range($start='yesterday', $days='+31 days') { $begin = new DateTime( $start ); $end = new DateTime( $days ); $interval = new DateInterval('P1D'); $date_range = new DatePeriod($begin, $interval ,$end); return $date_range; }
ループで回せるように range の変わる date_range を試しに作ってみた。
実例
<?php $sday = date('Y-m-01', strtotime('this month ')); // 05-01 $eday = date('Y-m-01', strtotime('next month ')); // 06-01 foreach( date_range($sday, $eday) as $day ){ echo $day->format('Y-m-d')."\n"; }
出力例
2018-05-01 2018-05-02 2018-05-03 (略 2018-05-29 2018-05-30 2018-05-31
ポイント
ループで回すときに、最終日の1日先を指定するのがポイント
DatePeriod は指定した終了時刻未満を配列に返すので、注意が必要。