我正在使用Yii框架,在修改数据时为模型验证设置了一些规则。其中一个是比较有效的DOB输入。标准将是DOB不应该
这是我实施规则的方式:
/**
* Checks the valid input for DOB
*
* @return boolean
* @throws Error Message
*/
public function validDOB($attribute,$params){
if (($bdate = $this->bdate) != null){
$now = new DateTime("now");
$dob = DateTime::createFromFormat('d/m/Y', $bdate);
$interval = $now->diff($dob);
$curdate=strtotime($now->format('d/m/Y'));
$largedate=strtotime($dob->format('d/m/Y'));
if ($interval->y > 100){
$this->addError('bdate', 'Wow! Are you sure you are ' . $interval->y .' years old?');
}elseif ($curdate > $largedate){
$this->addError('bdate', 'Psst.. Hey... You are not a time traveller...');
}
}
}
问题是,验证者认为有效并在选择无效日期时抛出错误,但是,今天的日期是03/09/2014 (d / m / Y) ,所选日期为04/09/2014 (d / m / Y)假设系统应提示错误消息,而是返回有效输入。我必须选择日期,直到大约13/09/2014 (d / m / Y),然后只有系统显示无效输入......
同样选择年份。假设日期是13/09/2014 (d / m / Y),所以在100年之间,这意味着如果用户在13/09/1914之前选择任何东西(d / m / Y)系统会提示无效...但它也会导致上面的错误..
此外我还意识到,当我使用 strtotime()来比较未来的日期时,它会以某种方式导致100年之间的那些年份变得无效......
我做错了什么?