Php 我们如何进行jQuery GridView日期范围搜索

Php 我们如何进行jQuery GridView日期范围搜索,php,jquery,yii,Php,Jquery,Yii,下面是我的Gridview小部件代码。我想通过输入两个日期范围值来搜索这个jquery gridview。日期范围值是从日期选择器获取的 <?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'printstatusforlocal-grid', 'dataProvider'=>$model->searchprogress(), 'filter'=>$model, 'columns'=&g

下面是我的Gridview小部件代码。我想通过输入两个日期范围值来搜索这个jquery gridview。日期范围值是从日期选择器获取的

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'printstatusforlocal-grid',
'dataProvider'=>$model->searchprogress(),
'filter'=>$model,
'columns'=>array(

'order_id',
'albumname',            
'orderdate',
'username',
array('header'=> 'Synchronized',
'name'=>'synchronize',
'value'=>'$data->Syncronize',
 ),
array(
'class'=>'CButtonColumn',
 ),
 ),
 )); ?>


 This is my gridview widget.I want to make a date range search through this? 
        My date picker chosing code is following..


<script src="<?php echo  Yii::app()->baseUrl.'/js/jquery.easing.1.3.js';?>"></script> <script src="<?php echo Yii::app()->request->baseUrl; ?>/js/jquery-ui-1.10.4.min"  type="text/javascript"></script>
<script>
$(function() {
$( "#datepicker1, #datepicker2" ).datepicker({
dateFormat: "yy-mm-dd",
});

这是我的gridview小部件。我想通过它进行日期范围搜索?
我的日期选择器选择代码如下。。

jQueryUIDatePicker有一些api。所以我会使用以下方法: 在datepicker上选择我们重新路由到相同的控制器/操作,并附加
date
GET参数:

<?php 
   $url= $this->createUrl($this->route());// to go to the same controller/action 
   ...
?>
<script> 
$("#datepicker1, #datepicker2").datepicker({
  dateFormat: "yy-mm-dd",
// we append the current value to reroute
  onSelect: function(dateText) {location.href = "<php echo $url;?>&date="+ this.value;},
});
</script>
现在需要将此方法修改为smth。像这样:

public function searchprogress($date=null)
{
    $criteria=new CDbCriteria;
    $criteria->compare('id',$this->id); 
    ...
    if ($date)        
        $criteria->compare('date', $date); // compare models with this passed parameter
    else  
        $criteria->compare('date', $this->date);     // default comparison
// if you want some range comparison
    if ($date) $criteria->addCondition('Begin >= "' . $date . '" ');
    if ($date) $criteria->addCondition('End<= "' . $date . '" '); 
    ...
    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria, 
    ));  
public函数searchprogress($date=null)
{
$criteria=新的CDB标准;
$criteria->compare('id',$this->id);
...
如果($日期)
$criteria->compare('date',$date);//使用此传递的参数比较模型
其他的
$criteria->compare('date',$this->date);//默认比较
//如果你想要一些范围比较
如果($date)$criteria->addCondition('Begin>=“。$date.”);

如果($date)$criteria->addCondition('End如果我理解正确:

  • 数据库表中的日期字段是
    orderdate
  • 您想搜索比较
    orderdate
    fromdate
    todate
在这种情况下,必须将这两个属性添加到模型类中:

public $fromdate;
public $todate;
然后在模型规则中将它们声明为安全的(在所有场景中或仅在搜索中):

将这些属性添加到网格过滤器:

'columns' => array(
    ...
    array(
        'name' => 'orderdate',
        'filter' => $this->widget( 'zii.widgets.jui.CJuiDatePicker', array(
                'model'          => $model,
                'attribute'      => 'fromdate',
            ), true ) . $this->widget( 'zii.widgets.jui.CJuiDatePicker', array(
                'model'          => $model,
                'attribute'      => 'todate',
            ), true ),
    ),
    ...
),
然后将
compare
添加到
searchprogress()
方法:

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'printstatusforlocal-grid',
'dataProvider'=>$model->searchprogress($_GET['date']),
 ...
$criteria->compare('orderdate', $model->fromdate);
$criteria->compare('orderdate', $model->todate);
注意。DB表中的日期格式和属性值中的日期格式必须相同(例如Y-m-d)。如果将时间戳存储在DB中,则需要如下内容:

$criteria->compare('orderdate', strtotime($model->fromdate));

通过对我的示例代码进行一些小的改进,您可以轻松地实现按日期周期进行搜索。祝您好运!

@Sujith K,我没有注意到begin和end的两个参数。但是您可以稍微修改代码,使其适用于两个日期选取器值。@Sujith K,传递两个日期选取器参数的另一种方法是将日期选取器i包装起来在表单上,将“提交”按钮添加到表单并重新路由到同一个conrtoller/action。
$criteria->compare('orderdate', $model->fromdate);
$criteria->compare('orderdate', $model->todate);
$criteria->compare('orderdate', strtotime($model->fromdate));