PHP有效的DOB输入/不准确的日期比较

时间:2014-09-03 13:47:44

标签: php validation date yii

我正在使用Yii框架,在修改数据时为模型验证设置了一些规则。其中一个是比较有效的DOB输入。标准将是DOB不应该

  1. 大于今天
  2. 从今天起100年之间。
  3. 这是我实施规则的方式:

    /**
     * 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),然后只有系统显示无效输入......

    Date greater than today

    同样选择年份。假设日期是13/09/2014 (d / m / Y),所以在100年之间,这意味着如果用户在13/09/1914之前选择任何东西(d / m / Y)系统会提示无效...但它也会导致上面的错误..

    此外我还意识到,当我使用 strtotime()来比较未来的日期时,它会以某种方式导致100年之间的那些年份变得无效......

    我做错了什么?

0 个答案:

没有答案