2

在 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用来输入日期字段的日期。

4

1 回答 1

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.');
}
于 2012-09-26T07:40:31.827 回答