Сравнение дат Yii2 не работает внутри правил ()

У меня есть форма, и пользователь должен ввести дату начала и дату окончания.

Я использую атрибут сравнения внутри метода правил, потому что пользователь не может ввести дату окончания, которая предшествует дате начала.

Вот мой метод правил внутри модели формы:

['dateFinTR', 'date', 'format' => 'php: d/m/Y'],
['dateFinTR', 'compare', 'compareAttribute' => 'dateDebutTR', 'operator' => '>=', 'skipOnEmpty' => true,]

Проблема заключается в том, что если пользователь вводит дату начала 2016-05-18 и дату окончания 2016-04-17, отображается сообщение об ошибке, и пользователь не может отправить форму. Но если пользователь вводит дату начала 2016-05-18 и дату окончания 2016-04-23, ошибки нет, и пользователь не может отправить форму.
Фактически только день сравнивается с этим правилом.

РЕДАКТИРОВАТЬ
По этой ссылке: Yii2 Проверка даты сравнения, Я создал собственный метод проверки, но я использую европейский формат, поэтому я считаю, что метод strtotime не очень хорош.
Вот мой метод validateDates:

public function validateDates()
{
if (strtotime($this->dateFinTR) <= strtotime($this->dateDebutTR))
{
$this->addError('dateFinTR', 'Veuillez saisir une date de fin se trouvant avant la date de début');
}
}

И вот вызов этого метода:

['dateFinTR', 'validateDates', 'skipOnEmpty' => true],

0

Решение

Это распространенная проблема форматирования / преобразования дат, которая не является специфической для Yii.

Вы можете просто попытаться использовать DateTime::createFromFormat(), например :

public function validateDates()
{
$date1 = \DateTime::createFromFormat('d/m/Y', $this->dateDebutTR);
$date2 = \DateTime::createFromFormat('d/m/Y', $this->dateFinTR);
if ($date2<=$date1) {
$this->addError('dateFinTR', 'error message');
}
}

Но в большинстве случаев лучше хранить даты в вашей базе данных в правильном формате (DATE с MySQL, например), и только конвертировать их для отображения.

4

Другие решения

Подумайте, чтобы исправить ваши даты, проверьте следующее:

if (strtotime($this->dateFinTR) > strtotime($this->dateDebutTR))

Дата окончания события должна быть больше даты начала.

0

По вопросам рекламы [email protected]