Вам необходимо использовать CompareValidator
:
public function rules()
{
return [
[['since', 'until'], 'required'],
[['since'], 'compare', 'compareAttribute' => 'util', 'operator' => '<='],
];
}
Это будет выполнять сравнение строк и должно работать, если вы используете даты в формате ISO 8601 ,В другом случае вам необходимо сначала преобразовать даты в метку времени:
public function rules()
{
return [
[['since', 'until'], 'required'],
['since', 'date', 'timestampAttribute' => 'since'],
['until', 'date', 'timestampAttribute' => 'until'],
[['since'], 'compare', 'compareAttribute' => 'util', 'operator' => '<=', 'enableClientValidation' => false],
];
}
Валидатор сравнения можно использовать только для сравнения строк и чисел.Если вам нужно сравнить значения, такие как даты, у вас есть два варианта.Для сравнения даты с фиксированным значением вы можете просто использовать валидатор date
и указать его свойство $min
или $max
.Если вам нужно сравнить две даты, введенные в форму, например, поле fromDate
и поле toDate
, вы можете использовать комбинацию сравнения и валидатора даты, как показано ниже:
['fromDate', 'date', 'timestampAttribute' => 'fromDate'],
['toDate', 'date', 'timestampAttribute' => 'toDate'],
['fromDate', 'compare', 'compareAttribute' => 'toDate', 'operator' => '<', 'enableClientValidation' => false],
Поскольку валидаторывыполняется в том порядке, в котором они указаны, это сначала проверит, что значения, введенные в fromDate
и toDate
, являются действительными значениями даты и, если это так, они будут преобразованы в машиночитаемый формат.После этого эти два значения сравниваются с валидатором сравнения.Проверка клиента не включена, поскольку это будет работать только на стороне сервера, поскольку средство проверки даты в настоящее время не обеспечивает проверку клиента, поэтому $enableClientValidation
также установлено на false
и на устройстве проверки сравнения.
https://www.yiiframework.com/doc/guide/2.0/en/tutorial-core-validators#comparing-date-values