這是因爲你沒有提供一天,所以它默認使用當天。當天是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
AHHHHH複製!好的趕上!優秀的解釋。非常感謝你! :-) – theflarenet
這沒問題!我添加了一個我不喜歡的可能解決方案,但請檢查一下! – ishegg
美麗!我喜歡在格式中快速查找「d」。似乎是最有效的方式來做到這一點。 – theflarenet