Yii2 日期比较在规则内不起作用()

Yii2 date comparison not working inside rules()

我有一个表格,用户必须输入开始日期和结束日期。

我在规则方法中使用比较属性,因为用户不能输入在开始日期之前的结束日期。

这是我在表单模型中的规则方法:

['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,则没有错误,用户无法提交表单。 其实只有天比较这个规则。

编辑 根据此 link: ,我创建了一个自定义验证方法,但我使用的是欧洲格式,所以我认为 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],

考虑将您的日期检查更改为以下内容:

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

活动结束日期应大于开始日期。

这是一个常见的日期 formatting/converting 问题,并不是 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),并且只转换它们以供显示。