【PHP】今週の月曜日から日曜日を表示する方法

【PHP】今週の月曜日から日曜日を表示する方法

こんにちは。
PHPで1週間の日付を表示したいとなった時、
今日を起点に1週間分表示するのは簡単ですが、
月曜日を起点として1週間の日付を表示しようと思うと少し工夫が必要です。

ちょっとわかりづらいかもしれませんが、
例えば、今日(3/10)の日付を例としたとき、
3/10(土)から3/16(金)まで表示するのではなく、
3/5(月)から3/11(日)まで表示したいという場合です。

では、コードで説明します。
注意としては、このコード上では月曜日を起点とするように組んでいます。
通常通り、日曜日を起点とする場合は、適宜読み替えてください。

//今週の日付を保持するための配列
$output_date = array();

$week_start = ['-6','0','-1','-2','-3','-4','-5'];
//date('w')で曜日のインデックスを取得する。
//例:今日が火曜日の場合、2を返す。
$week_index = $week_start[date('w')];

for ($i=0; $i<7; $i++) {
     //今日が火曜日だとしたら、$week_indexが-1となるため、今日の日付から-1した日を月曜日と判断。
     //そこから1週間分ループしながら表示する。
     $disp_date = strtotime(date('Y-m-d') . '+' . $week_index . 'days');
     $output_date = date('m/d',  $disp_date);

     $week_index++;
}

コード上のコメントにもあるように、
date('w')で、曜日のインデックスを取得します。
インデックスは日曜日がスタートとして、
日曜日の場合は0。
月曜日の場合は1。
火曜日の場合は2。
と値を返してくれます。
これを利用すれば、まず今日が何曜日かというのを数値で判断できます。

そして、最初に宣言している$week_startで、
今日の曜日から、月曜日までの日付の差を保持しています。

つまり今日の曜日が
土曜日の場合、月曜日は5日前。
日曜日の場合、月曜日は6日前。
という情報を持っていることになります。

date('w')で取得する値をキーとして、
$week_startの配列の情報を上手く取得できれば
今週の月曜日が何日前かがわかります。
つまり、表示したい日付のスタートがいつかわかりました。

スタートが分かれば、あとはそのスタートから7日分表示すれば、
1週間の日付を表示することができます。

ループの終了条件を変えることで、
2週間分、3週間分の日付を取得することも可能です。

なんだかスマートではないような気がするのですが、
僕にはこれくらいしか思いつきませんでした...
もっと簡単な書き方とか、わかりやすい書き方があれば、
教えていただきたいです٩( ᐛ )و

では。