【日付セット】月の日数 (paizaランク C 相当) 解答例 – PHP編【paiza】
【日付セット】 > 月の日数 (paizaランク C 相当)
※リンク先へ移動する為には「paiza」へのログインが必要です。
閏年と平年によって月日数が変化することがこの問題でドツボにハマる可能性がある注意点です。ですがPHP関数、「date()」関数と「strtotime()」を使用すれば自動的に処理してくれるのでこれを利用しましょう。
解答例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $input = explode(" ",trim(fgets(STDIN))); $year = $input[0]; $month = $input[1]; $counter =1; $time = $year."/".$month."/1"; while($time){ $test = strtotime($time."+1 day"); $testtime = date("Y/m/d",$test); $ex = explode("/",$testtime); $nextm = $ex[1]; if($nextm == $month){ $counter++; } else { break; } $time = $testtime; } echo $counter; ?> |
解答方針
与えられた「年月」から「〇(年)/△(月)/1(日)」という文字列を作成し、その文字列から「UNIXタイムスタンプへ変換し1日分プラス」、そしてそのタイムスタンプ数値を「date()」関数で文字列へ再変換します。その際に、月が変化しなければカウンターを1つプラスしていき、日数をカウントします。この処理を「while()」でループさせ、月が変化するまで続けます。月が変化した瞬間に処理を中断させることでループを抜け出し、その月の日数をカウントする原理です。
この方法のいいところは関数が自動的に平年、閏年関係なく日数を処理してくれる点ですね(>_<)
「date()」と「strtotime()」を使用し、日数や月を増減させる方法はこちらの記事を参照してくださいね。