所以今天我发现checkdate()
基本上,它允许小数
checkdate(2,21.5,2000); //returns TRUE
checkdate(2.345,28.345,1988.3453); //returns TRUE
是正常的吗?因为我希望checkdate()
也会检查输入的值是整数而不是小数...更令人讨厌的是is_int()
不能用于字符串
答案 0 :(得分:3)
checkdate()
函数不检查传递给它的参数是否是有效整数。如果它们不是,它只是将其转换为整数,就像应用了intval()
一样。因此,这就是checkdate()
处理它们时日期值的样子:
$a = array(2,21.5,2000);
$b = array(2.345,28.345,1988.3453);
print_r(array_map('intval', $a));
print_r(array_map('intval', $b));
输出:
Array
(
[0] => 2
[1] => 21
[2] => 2000
)
Array
(
[0] => 2
[1] => 28
[2] => 1988
)
如您所见,小数位后的所有内容都已被删除。
作为checkdate()
的替代方法,您可以使用DateTime类进行验证。它非常强大,可以处理各种日期(Glavić起php.net起作用):
function validateDate($date, $format = 'Y-m-d H:i:s')
{
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
答案 1 :(得分:0)
如果您正在处理字符串输入,则可以使用正则表达式检查格式问题,并使用checkdate
进行验证。
function is_valid_date($date) {
// does it look like a date?
if (preg_match("/^(\d{2})-(\d{2})-(\d{4})$/", $date, $matches)) {
// is it a valid date?
return checkdate($matches[1], $matches[2], $matches[3]);
}
return false;
}
var_dump(is_valid_date("01-01-1970")); // true
var_dump(is_valid_date("20-20-1970")); // false
var_dump(is_valid_date("1.6-4.3-12345")); // false