これは、曜日が指定されていないためです。そのため、現在の日付がデフォルトで使用されています。現在の日は31日ですが、9月には30日しかないので、10月1日にスキップします。この例では
ルック:
function validateDate($date, $format = 'm-Y') {
$d = DateTime::createFromFormat($format, $date);
echo $d->format("d-".$format); // added the day for debugging
return $d && $d->format($format) == $date;
}
var_dump(validateDate('08-2017', 'm-Y')); // 31-08-2017, true
var_dump(validateDate('09-2017', 'm-Y')); // 01-10-2017, there's no 31-09-2017, false
機能はこれが少し初歩的であるこのanswerまたはphp.net
からコピーされましたが、形式にはd
をがない場合は、検出することができますし、これを避けるために手動で1に設定してください。
<?php
function validateDate($date, $format = 'm-Y') {
if (strpos($format, "d") === false) {
$format = "d ".$format;
$date = "01 ".$date;
}
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) === $date;
}
var_dump(validateDate('08-2017', 'm-Y')); // 31-08-2017, true
var_dump(validateDate('09-2017', 'm-Y')); // 01-09-2017, true
からコピーされました!ナイスキャッチ!優れた説明。どうもありがとうございました! :-) – theflarenet
これは問題ありません!私はまったく気に入らなかった可能性のあるソリューションを追加しましたが、それをチェックしてください! – ishegg
美しい!私はフォーマット内の "d"のクイックルックアップが大好きです。それを行う最も効率的な方法のようです。 – theflarenet