Date Range Filter Grid

How can I have a date field range filter above the grid?

I want to have a search by date not inside the grid but before the grid.

hi dudunegrinhu,

in view/_search.php


use kartik\daterange\DateRangePicker;

echo DateRangePicker::widget([

    'model'=>$model,

    'attribute'=>'datetime_range',

    'convertFormat'=>true,

    'pluginOptions'=>[

        'timePicker'=>true,

        'timePickerIncrement'=>30,

        'format'=>'Y-m-d h:i A'

    ]

]);



and in index or whatever file u want to call just call


<?php  echo $this->render('_search', ['model' => $searchModel]); ?>

so that u can filter by date range before grid. if u do not want to render _search then copy _search code before grid it also works.

regards,

webin

I’m doing this:




<?php

    	$form = ActiveForm::begin();

    

	    echo FieldRange::widget([

		    'form' => $form,

		    'model' => $model,

		    'label' => 'Enter date range',

		    'attribute1' => 'order_placed',

		    'attribute2' => 'order_eta',

		    'type' => FieldRange::INPUT_WIDGET,

		    'widgetClass' => DateControl::classname(),

		    'widgetOptions1' => [

		        'saveFormat' => 'php:U'

		    ],

		    'widgetOptions2' => [

		        'saveFormat' => 'php:U'

		    ],

		]);

	 ?>



but I’m not sure what is the code to add in my ModelSaearch.php so it filter the date range.




<?php

    	

    $form = ActiveForm::begin([

        'action' => ['index'],

        'method' => 'get',

    ]);

	    echo FieldRange::widget([

		    'form' => $form,

		    'model' => $model,

		    'label' => 'Enter date range',

		    'attribute1' => 'order_placed',

		    'attribute2' => 'order_eta',

		    'type' => FieldRange::INPUT_WIDGET,

		    'widgetClass' => DateControl::classname(),

		    'widgetOptions1' => [

		        'saveFormat' => 'php:U'

		    ],

		    'widgetOptions2' => [

		        'saveFormat' => 'php:U'

		    ],

		]);

	 ?><div class="form-group">

        <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?></div>

 <?php ActiveForm::end(); ?>



in SearchMOdel:




->andWhere('createdAt <= :dateTo', [':dateTo' => $datefilter['to']])

->andWhere('createdAt >= :dateFrom', [':dateFrom' => $datefilter['from']])

thank u it works.

It’s not working for me. This is my full code:

_search.php view




<div class="pre-invoice-search">


    <?php

    	$form = ActiveForm::begin([

    		'action' => ['index'],

    		'method' => 'get',

    	]);

    

	    echo FieldRange::widget([

		    'form' => $form,

		    'model' => $model,

		    'label' => 'Enter date range',

		    'attribute1' => 'operation_date',

		    'attribute2' => 'order_eta',

		    'type' => FieldRange::INPUT_DATETIME,

		]);

	 ?>

	 

	 <div class="form-group">

        <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>

        <?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?>

    </div>


    <?php ActiveForm::end(); ?>


</div>



Search Model




public function search($params)

    {

    	$query = PreInvoice::find()

    	->where(['current_status' => ['Order Delivered', 'Cancelled']])

    	->orderBy(['id' => SORT_DESC]);

        

        $dataProvider = new ActiveDataProvider([

            'query' => $query,

        ]);


        if (!($this->load($params) && $this->validate())) {

            return $dataProvider;

        }

        

        $query->andFilterWhere('order_eta <= :dateTo', [':dateTo' => $datefilter['to']])

        ->andFilterWhere('order_eta >= :dateFrom', [':dateFrom' => $datefilter['from']]);


        return $dataProvider;

    }



And I’m getting Undefined variable: datefilter

Also my database datetime format is: YYYY-MM-DD 00:00:00




$create = Yii::$app->formatter->asDate($this->created_at, 'php:Y-m-d'); // store in database ass y-m-d

$update = Yii::$app->formatter->asDate($this->updated_at, 'php:Y-m-d'); // store in database ass y-m-d




->andFilterWhere(['>=', 'created_at', $create ]) // compare createdate 

->andFilterWhere(['<=', 'updated_at', $update ])// compare with updatedate