0

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

我在规则方法中使用了 compare 属性,因为用户无法输入开始日期之前的结束日期。

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

['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 Date compare validation,我创建了一个自定义验证方法,但我使用的是欧洲格式,所以我认为 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],
4

2 回答 2

4

这是一个常见的日期格式/转换问题,并不是 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)将日期存储在数据库中,并且只转换它们以供显示。

于 2016-05-18T12:08:35.403 回答
0

考虑将您的日期检查修复为以下内容:

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

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

于 2016-05-18T08:57:50.943 回答