🐘
PHPでY年M月の第n週のm曜日が何日か求める
ググってもなかなか見つからなくて困って結局自分で作りました。せっかく苦労して書いたので残しておきたくなりました。
多分もっと効率のいい方法があると思います。もっと良い方法があれば知りたい。
/**
* 指定した年月の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日(金)
*/
2023/09/17 追記
ChatGPTに"もっと良い方法"を実践してもらいました。
あちらの方がコード行数は多いですが読みやすいかもしれないです。
Discussion