2016-05-18 3 views
0

私はフォームを持っており、ユーザーは開始日と終了日を入力する必要があります。Yii2日付比較がルール内で機能していません。

ユーザーは、開始日より前の終了日を入力できないため、ルールメソッド内の比較属性を使用しています。

はここで、フォームのモデル内の私のルールの方法です:

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

ユーザーは2016年5月18日のように最初の日と2016年4月17日の終了の日付を入力する場合、問題は、ありますエラーメッセージが表示され、ユーザーはフォームを送信できません。しかし、ユーザーが2016-05-18の開始日と2016-04-23の終了日を入力した場合、エラーはなく、ユーザーはフォームを送信できません。 実際、このルールと比較するのは1日だけです。このリンクによると

EDIT

Yii2 Date compare validationは、私は、カスタム検証メソッドを作成しましたが、私はのstrtotime方法が良いwirkingされていないと思うので、私はヨーロッパの形式を使用しています。 は、ここに私の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'); 
    } 
} 

そして、ここでは、このメソッドの呼び出しです:

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

イベント終了日を次のようになります。あなたの日付は、次のことを確認してください

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

答えて

3

これは一般的な日付の書式設定/変換の問題です。実際にはYii固有の問題ではありません。 、たとえば:

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'); 
    } 
} 

しかし、それは良いはず、ほとんどの場合、適切なフォーマット(例えばMySQLでDATE)を使用してデータベースに日付を格納するための、そして唯一の表示のためにそれらを変換します。

+0

私のすべての日付は日付形式でデータベースに保存されますが、ユーザーがdatepickerで日付を追加すると、それらはヨーロッパ形式です。 –

0

を修正するために考えてみましょうより大きな開始日。

+0

はい、条件が正常であればエラーが表示されるため、イベントの開始日がイベントの終了日よりも大きいかどうかを確認する必要があります。^^ –

+0

if($ this-> hasErrors() ){return; } $ this-> addErrorコールの前に? – Taras

関連する問題