それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

phpで指定した日付の範囲を作り月末にも対応させる

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 は指定した終了時刻未満を配列に返すので、注意が必要。

参考資料