とある課題でcheckdate関数と同じ機能ですが、以下のような999999年まで判定可能な関数を自作して数個の日付の妥当性を検証しました。
しかし、999999年12月31日だけ存在するはずなのに正しくないとの表示になりました。
下記のコードでここを直せば正しく表示されるという箇所があればご指摘ください。
php
1<?php 2 function isLeapYear($year){ 3 return ((($year % 4) == 0) && ((($year % 100) != 0) || (($year % 400) == 0))); 4 } 5 function mycheckdate($month,$day,$year) { 6 if($month < 1 || $month > 12) { 7 return false; 8 } 9 if($day < 1 || $day > 31) { 10 return false; 11 } 12 if($year < 1 || $year > 99999) { 13 return false; 14 } 15 return true; 16 } 17 18 function debug_mcd($month, $day, $year){ 19 print($year."年".$month."月".$day."日は正しい日付"); 20 if(mycheckdate($month,$day,$year)){ 21 print("です."); 22 } else{ 23 print("ではありません."); 24 } 25 print("<br>"); 26 } 27 28 debug_mcd(7, 2, 2020); // 正しい 29 debug_mcd(7, 32, 2020); // 正しくない 30 debug_mcd(2, 29, 2400); // 正しい 31 debug_mcd(2, 29, 2401); // 正しくない 32 debug_mcd(12, 31, 99999); // 正しい 33 debug_mcd(12, 32, 99999); // 正しくない 34 debug_mcd(2, 29, 99999); // 正しくない 35 debug_mcd(2, 29, 99996); // 正しい 36 37?>
表示結果
2020年7月2日は正しい日付です.
2020年7月32日は正しい日付ではありません.
2400年2月29日は正しい日付です.
2401年2月29日は正しい日付ではありません.
99999年12月31日は正しい日付ではありません.
99999年12月32日は正しい日付ではありません.
99999年2月29日は正しい日付ではありません.
99996年2月29日は正しい日付です.