Compare Date With Operators

Hi,

I have in my cGridView two columns date1 and date2. I can find all my records in filters of date1 and date2. Now, I have to find my records through filters, which are older than date1 or/and younger than date2.

Here is my model:




public function search()

{

   $criteria=new CDbCriteria;

   // some code

   $criteria->compare('date1',$this->date1,true);

   $criteria->compare('date2',$this->date2,true);

   //some code

   return new CActiveDataProvider($this, array('criteria'=>$criteria));

}



Is it possible to return by criteria all records that are grater than date1, or/and lesser than date2?

I tried like this, but it doesn’t work:




public function search()

{

   $criteria=new CDbCriteria;

   // some code

   $criteria->addCondition("(date1>=:dt1)");

   $criteria->addCondition("(date2>=:dt2)");

   $criteria->params[':dt1'] = this->$date1;

   $criteria->params[':dt2'] = this->$date2;

   //some code

   return new CActiveDataProvider($this, array('criteria'=>$criteria));

}



try the following


        $criteria->condition = "date1 >= :date1 AND date2 >= :date2";

        $criteria->params = [':date1' => $this->date1, ':date2' => $this->date2];

It works. But it works only when I enter into inputs date1 and date2 some data. I also want to add search function which looks like this:




if(empty($this->date1) && empty($this->date2)) {

   $criteria->compare('date1',$this->date1,true);

   $criteria->compare('date2',$this->date2,true);

}

else if(empty($this->date1) && !empty($this->date2)) {

   $criteria->condition = "date2 <= :date2";

   $criteria->params = array(':date1' => $this->date1, ':date2' => $this->date2);

}

else if(!empty($this->date1) && empty($this->date2)) {

   $criteria->condition = "date1 >= :date1";

   $criteria->params = array(':date1' => $this->date1, ':date2' => $this->date2);

}

else {

   $criteria->condition = "date1 >= :date1 AND date2 <= :date2";

   $criteria->params = array(':date1' => $this->date1, ':date2' => $this->date2);

}



User can add date1 and search only by date1 field, can add date2 field and search only by date2 field, can add date1 and date2 field and search date1>= date1 and date2<=date2.

If date1 and date2 is empty function returns all records.

But it doesn’t work.

Trying my code




if($this->date1 !='' && $this->date2!=''){

     $criteria->addCondition("date1>= '$this->date1'");

     $criteria->addCondition("date2<= '$this->date2'");

}

elseif($this->date1 !=''){

     $criteria->addCondition("date1>= '$this->date1'");

}

elseif($this->date2 !=''){

     $criteria->addCondition("date2<= '$this->date2'");

}



It works great, thanks Hang Le!