Mi duda es la siguiente en un formulario tengo dos campos de fecha uno es para una fecha de inicio y otra es fecha de termino, lo que necesito es que entre esta dos fechas haya un periodo de 4 o 6 meses, si esto es cierto que el Form guarde los datos, pero si no, no lo haga, si me puede enviar un msj que diga: “debe de ser un perido de 4 o 6 meses” mejor.
Espero me puedan ayudar
Hola Ruben , hice algunas pruebas y esta es la implementacion mas facil y rapida que logre hacer
En tu model
public function rules()
{
return [
[[‘date’, ‘date2’], ‘date’, ‘format’ => ‘dd-MM-yyyy’],
[[‘date2’, ‘date’], ‘betweenRule’],
];
}
public function betweenRule($attribute, $params, $validator)
{
$date1 = new \DateTime($this->date);
$date2 = new \DateTime($this->date2);
$months = $date1->diff($date2)->format(’%m’);
if ($months < 4 || $months > 6) {
$this->addError($attribute, ‘La fecha debe estar entre 4 o 6 meses’);
}
}
En tu view
<?php $form = ActiveForm::begin([
‘enableAjaxValidation’ => true,
‘enableClientValidation’ => false,
‘options’ => [‘enctype’ => ‘multipart/form-data’]
]) ?>
<?= $form->field($model, ‘date’)->widget(DatePicker::className(), [
‘dateFormat’ => ‘dd-MM-yyyy’,
])?>
<?= $form->field($model, ‘date2’)->widget(DatePicker::className(), [
‘dateFormat’ => ‘dd-MM-yyyy’,
])?>
Submit
<?php ActiveForm::end() ?>
Controller
tienes que implementar validacion por ajax para tu active form