【问题标题】:Yii Framework Date RangeYii 框架日期范围
【发布时间】:2015-03-10 07:37:55
【问题描述】:

我在 Yii 中查找日期范围时遇到问题,如果 FROM_DATE: 2015-02-05 和 to_date: 2015-02-10,在 gridview 中只显示日期为 05,06,07,08,09 和只有 10-02 没有出现。 在另一种情况下,如果我想搜索这样的日期范围 from_date : 2015-02-21 to_date: 2015-02-21,则应出现日期为 2015-02-21 的数据 如何解决这个问题?它应该如何是正确的代码?

型号

public function search()
{
    $criteria=new CDbCriteria;
if(!empty($this->from_date) && empty($this->to_date)){
        $criteria->condition="create_date >= '$this->from_date'";
    }elseif(!empty($this->to_date) && empty($this->from_date)){
        $criteria->condition="create_date <= '$this->to_date'";
    }elseif(!empty($this->to_date) && !empty($this->from_date)){
        $criteria->condition="create_date >= '$this->from_date' and create_date<= '$this->to_date'";
    }
    $criteria->compare('user_id',$this->user_id);
    $criteria->compare('lokasi',$this->lokasi,true);
    $criteria->compare('satisfy_val',$this->satisfy_val,true);
    $criteria->compare('create_date',$this->create_date,true);
    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
        'sort'=>array(
        'defaultOrder'=>array('create_date DESC',)),
            'pagination'=>array(
                    'PageSize'=>150
            ),
    ));
}

谢谢你

【问题讨论】:

    标签: mysql date yii


    【解决方案1】:

    您可以使用以下代码搜索日期范围

    if((isset($this->from_date) && trim($this->from_date) != "") && (isset($this->to_date) && trim($this->to_date) != "")){
            $criteria->condition = ' create_date>="'.date("Y-m-d",strtotime($this->from_date)).'" AND create_date<="'.date("Y-m-d",strtotime($this->to_date)).'"';
    }
    

    使用上面的代码后你的代码看起来:

    public function search()
    {
        $criteria=new CDbCriteria;
        if((isset($this->from_date) && trim($this->from_date) != "") && (isset($this->to_date) && trim($this->to_date) != "")){
            $criteria->condition = ' create_date>="'.date("Y-m-d",strtotime($this->from_date)).'" AND create_date<="'.date("Y-m-d",strtotime($this->to_date)).'"';
        }
        $criteria->compare('user_id',$this->user_id);
        $criteria->compare('lokasi',$this->lokasi,true);
        $criteria->compare('satisfy_val',$this->satisfy_val,true);
        $criteria->compare('create_date',$this->create_date,true);
        return new CActiveDataProvider($this, array(
           'criteria'=>$criteria,
           'sort'=>array(
           'defaultOrder'=>array('create_date DESC',)),
            'pagination'=>array(
                    'PageSize'=>150
            ),
      ));
    }
    

    【讨论】:

    • 感谢您的帮助和回复。我已经尝试过您创建的代码,但是如果您的代码放在 $ criteria-> compare ('create_date', $ this-> create_date, true); 下,结果是一样的,而且奇怪的是具有不同 from_date 和 to_date 的搜索日期范围运行完美,但按用户和 lokasi 分组不起作用。具有相同 from_date 和 to_end 日期的另一个条件不起作用。如何解决?
    • from_date 和 to to_date 在您的数据库中是单独的列字段吗?
    • 不,只有 create_date 列,from_date 和 to_date 是一个变量。现在问题解决了
    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多