Yii在两个日期显示验证错误

时间:2012-09-26 07:26:10

标签: php yii validation

在Yii中,我正在编写一个名为Invoice Application的小应用程序。我有两个名为Invoice Issue DateDue Date的字段。我想验证两个输入日期字段,以便Due Date必须大于Invoice Issue Date。所以我在模型中制定了以下规则:

public function rules (){
    array('due_date','compare','compareAttribute'=>'invoice_issue_date',
          'operator'=>'>',
          'allowEmpty'=>false,'message'=>'Due Date must be greater then Invoice Issue Date.'),
}

工作正常,但在一个字段中有两位数的日期(10到31),另一个有一个数字日期(1到9),那么这个验证根本不起作用。谁能告诉我这里有什么问题?欢迎任何帮助和建议。

更新

对于我使用CJuiDatePicker输入日期字段的日期。

1 个答案:

答案 0 :(得分:0)

我认为,这是许多PHP开发人员常犯的错误。

if( '2012-07-23' > '2012-08-17' ) 
// this is equivalent to comparing two strings , not dates

正确的方法是......

if( strtotime('2012-07-23') > strtotime('2012-08-17') ) 
// I prefer to use "mktime" than "strtotime" for performance reasons

您可能需要编写自己的验证方法,或在验证前将这些日期转换为整数。

修改

将此添加到您的模型类

public function rules () {
    array('due_date', 'isDueDateGreater'),
}

public function isDueDateGreater($attribute, $params) {
    if( strtotime($this->due_date) < strtotime($this->invoice_issue_date) ) 
        $this->addError('due_date', 'Due Date must be greater then Invoice Issue Date.');
}