表单输入内容验证:Validator date_format 的一个问题?
我在使用laravel 表单数据验证Validator的时候写入验证规则:'date' => 'required|date_format:Y-m'
在2017-10-31号的时候我输入2017-09发现不能通过验证,查看源码发现源码是这样的:
protected function validateDateFormat($attribute, $value, $parameters)
{
$this->requireParameterCount(1, $parameters, 'date_format');
if (! is_string($value) && ! is_numeric($value)) {
return false;
}
$date = DateTime::createFromFormat($parameters[0], $value);
return $date && $date->format($parameters[0]) == $value;
}
其中$date = DateTime::createFromFormat($parameters[0], $value)
,在第一个参数,也就是$parameter[0]为'Y-m'的时候,也就是验证年月,$date的内容就为年月+当前的天数和时间,例如当前日期是2017-11-03 11:33:33 那么DateTime::createFromFormat('Y-m', '2017-02')
输出的值就为2017-02-03 11:33:33;
那么这就出现了一个问题,假如当前日期是2017-10-31 11:33:33,那么DateTime::createFromFormat('Y-m', '2017-02')
输出就会变成2017-03-03 11:33:33,因为2月只有28天,当天数超过28时,就会往月份上累加,所以就会造成验证不通过的问题;
我不知道这个是laravel的一个bug,还是说date_format不允许用来验证年月,有人遇到类似的问题,或者指出我使用错误的地方么
推荐文章: