🐘

PHPでY年M月の第n週のm曜日が何日か求める

2022/05/17に公開約1,000字

ググってもなかなか見つからなくて困って結局自分で作りました。せっかく苦労して書いたので残しておきたくなりました。
多分もっと効率のいい方法があると思います。もっと良い方法があれば知りたい。

/**
 * 指定した年月のn週目の第m曜日の日付を求め、
 * その日付で作成したDateTimeインスタンスを返す
 *
 * @param int $year 		target year
 * @param int $month target 	target month
 * @param int $numberOfWeek 	target numberOfWeek
 * @param int $dayOfWeek 	target dayOfWeek
 * @return false|DateTime
 **/
function calcDateByDayOfWeek(
	int $year,
	int $month,
	int $numberOfWeek,
	int $dayOfWeek
) {
	$nw = $numberOfWeek - 1; 
	$dateTime = new DateTime("{$year}-{$month}-01 00:00:00 +{$nw} week");
	for ($i = 1; $i < 7; $i++) { 
		if ($dateTime->format('w') == $dayOfWeek) {
			return $dateTime; // 該当日付あり
		}
		$dateTime->modify("+1 day");
	}

	return false; // 該当なし
}

使用例

/* 2022年5月の第1週、金曜日の日付を求める */
$dayOfWeekMap = [
	 0 => '日',
	 1 => '月',
	 2 => '火',
	 3 => '水',
	 4 => '木',
	 5 => '金',
	 6 => '土'
];
$dateTime = calcDateByDayOfWeek(2022, 5, 1, 5);
$w = $dayOfWeekMap[$dateTime->format('w')];
echo $dateTime->format("Y年m月d日({$w})");

/* 結果:
 * 2022年05月06日(金) 
 */

Discussion

ログインするとコメントできます