ヤッチーのブログ

PHP,Bootstrap,J Query,Swiftやサーバ管理、トラウトのルアー釣り、ハードロック等の記録です

久しぶりに算数の問題解いた気分にPHP

 久しぶりに算数の問題を解いた気分です。

一年後の該当月の同じ順番の同じ曜日に予定を一括で複写したいという要望が有り、対応しました。

分かりにくいと思いますが、こういうことです。

2019/04/04(月)は一番目の月曜日だから
翌年は、2020/04/06(月)になる。 

2019/04/03(水)は一番目の水曜日だから
翌年は、2020/04/01(水)になる。 

2019/04/08(月)は二番目の月曜日だから
翌年は、2020/04/13(月)になる。 

2019/04/10(水)は二番目の水曜日だから
翌年は、2020/04/08(水)になる。
考えたのは、

何週目ではなく、何番目の曜日になるのか数値としてまず取得、
その日の曜日を取得、
一年後のその月が何曜日からはじまるのか数値として取得、
その辺りを変数に入れて、算出できるようにしたのが、下です。

ただ、問題が!

2019/04/30(火)は五番目の火曜日だから
翌年は、2020/05/05(火)になってしまうことです。
月が跨いでしまうことです。
ここはユーザーに任意の日付を入力してもらうことにしますか?


//何週目ではなく、何番目の曜日か取得
//$yyyy-mm-ddには、2019-04-01の形式で入る
$nth = floor( (date('j',strtotime($yyyy-mm-dd))-1) / 7 );
echo $nth."番目の";
//今年の該当年月日は何曜日か取得
$this_year_youbi = date('w',strtotime($yyyy-mm-dd));
echo $this_year_youbi;
echo "曜日";  
//一年後の該当月01日が何曜日から始まるのか取得
$next_year_youbi = date('w', strtotime(date('Y-m-01',strtotime('+1 year',strtotime($yyyy-mm-dd)))) );
echo $next_year_youbi;
$diff_youbi = $this_year_youbi - $next_year_youbi ;
echo $diff_youbi;
$ichinenngo = date('Y-m-01', strtotime($yyyy-mm-dd.' +1 year'));
echo $ichinenngo;
if($diff_youbi<0){
	$next_year_yoteibi = date('Y-m-d', strtotime($ichinenngo.' +'.(7*$nth+7+$diff_youbi).' day'));
}else{
	$next_year_yoteibi = date('Y-m-d', strtotime($ichinenngo.' +'.(7*$nth+$diff_youbi).' day'));
}
echo $next_year_yoteibi;

 久しぶりに算数の問題解いた気分ですね!