日付かどうかをチェックするのに、checkdateというモノがあるが、このヴァクァ詐加減に付ゐて記シタル!
-----
(PHP4,PHP5,PHP7,PHP8)
checkdate — グレゴリオ暦の日付/時刻の妥当性を確認します
checkdate(int $month, int $day, int $year): bool ← 年月日ではなく月日年の順なンで注意。
・month:月は1から12の間となる。
・day:日は、指定されたmonthの日数の範囲内になります。yearが閏(ウル~)年の場合は、それも考慮される。
・year:年は1から32767の間となる。
関連:checkdate
-----
年月日を$dayとし、
list($y,$m,$d) = explode("-",$day) ;
if(checkdate($m,$d,$y)){
print "日付である" ;
}else{
print "日付でない" ;
}//if
とシた上で、$dayに様々なモノをアレした結果が、以下である。
[1] 日付として妥当なので当然true
[2] 月日を1桁にしてもtrue
[3] 全角にするとfalse
[4] 15月は存在しないのでfalse
[5] 32日はないのでfalse
[6] 年だけだとfalse
[7] 全て数字ではないものだとfalse
[8] 年の頭に0が入っていてもtrue
ココまでは分かるが、問題は[9][10]である。
[9] ドォクォが日付邪!ドァヴォ!!
[10] ドォクォが日付邪!ドァヴォ!!
[11][12][13]の振舞を見ると、どうも各々の頭に数字以外が入るとfalseのヨ~だが、2文字目以後に入るとtrueとなる模様。
各々はint(整数)だとあるので、各々をis_numericで調べるなどする必要があるが、ンなもン、checkdateに内包シトケ耶!ドァヴォ!!
フォデ、
“20*3-10-10”
“20*3-1*-1*”
がtrueになる理由は?
全く以て、意味不明!
ヴァクァなの?スィヌの?
関連:[PHP] 指定日から”+1 day”とか [strtotime]
関連:[PHP] date(日付)のフォーマット一覧 [年/月/日/時/分/秒/曜日]