在Yii中,我正在编写一个名为Invoice Application的小应用程序。我有两个名为Invoice Issue Date
和Due 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
输入日期字段的日期。
答案 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.');
}