PHPで特定の曜日の日付の一覧を取得する方法

こんにちは、さるまりんです。

予定を立てるとき、今月の日曜日って何日と何日だっけ?って話になることありませんか。

そんな時のためにPHPの関数を書いてみました。

/**
 * 月の特定曜日の日付を一覧にする
 * @param $month 月
 * @param $year 年
 * @param $search 探す曜日 (sun, mon, tue, wed, thu, fri, sat)
 * @return 見つかった日付の配列
 */
function listDaysInMonth($month, $year, $search) {
    // 結果を格納する配列
    $list = [];
    // 月初日の文字列
    $start = "01-$month-$year";
    // 月初日をtime(整数値)で
    $start_time = strtotime($start);
    // その一月後をtime(整数値)で
    $end_time = strtotime("+1 month", $start_time);

    // 月初から1日(86,400秒)ずつ繰り返し
    for($i=$start_time; $i < $end_time; $i+=86400) {
        // 曜日が一致したら
        if(strtolower(date('D', $i)) == $search) {
          // 結果の配列に格納
          $list[] = date('Y-m-d', $i);
        }
    }

    // 結果を返却
    return $list;
}

こんな風に呼び出します。

echo '月曜日:' . implode(",", listDaysInMonth(12,2022,'mon')) . "\n";
echo '木曜日:' . implode(",", listDaysInMonth(12,2022,'thu')) . "\n";

結果です。

月曜日:2022-12-05,2022-12-12,2022-12-19,2022-12-26
木曜日:2022-12-01,2022-12-08,2022-12-15,2022-12-22,2022-12-29

今月(2022年12月)の月曜、木曜それぞれの日付が表示されていますね。

あ、肝心の日曜日!

日曜日:2022-12-04,2022-12-11,2022-12-18,2022-12-25

今年はクリスマスが日曜日なんですね。

ちょっとしたことですが、プログラムで書いてみる習慣をつけていこうと思います。

読んでくださってありがとうございました。

それではまた!