使用場景:在girdView搜索欄裏實現按時間區間來篩選數據
以下爲個人常用代碼塊:
<?php
use yii\helpers\Html;
use kartik\grid\GridView;
$visible ? $url = 'awards' : $url = 'index';
?>
<div class="awards-record-index">
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
[
'label'=>'手機號',
'value'=>function($model) {
return $model->user->mobile;
},
'visible'=> $visible,
],
//----------------------------------------------時間區間選擇器的使用---------------------------------------------------------
[
'attribute' => 'created_at', //時間戳類型若爲datetime則value不用格式化時間
'filterType' => GridView::FILTER_DATE_RANGE,
'value' => function($model) {
if ($model->created_at) {
return date('Y-m-d H:i:s',$model->created_at);
}
return null;
},
'filterWidgetOptions' => [
'startAttribute' => 'created_at_c', //開始時間的屬性
'endAttribute' => 'created_at_e', //結束時間的屬性
'convertFormat'=>true, // 重要爲true是則使用local->format的時間格式,將PHP的時間格式轉換爲js的時間格式
'pluginOptions' => [
'format' => 'yyyy-mm-dd hh:ii:ss',//日期格式
'timePicker'=>true, //顯示時間
// 'timePickerIncrement'=>5,//分鐘間隔
'timePicker24Hour' => true, //24小時制
'locale'=>['format' => 'Y-m-d H:i:s'], //php格式化時間
]
],
],
//----------------------------------------------單時間選擇器的使用---------------------------------------------------------
],
'toolbar' => [
['content' =>
Html::a('<i class="glyphicon glyphicon-repeat"></i>', [$url], ['data-pjax' => 0, 'class' => 'btn btn-default', 'title' => '刷新']),
],
'{export}',
'{toggleData}'
],
'exportConfig'=> [
GridView::EXCEL => ['filename' =>'抽獎記錄'],
],
'bordered' => true,
'striped' => false,
'condensed' => false,
'hover' => true,
'panel' => [
'type' => GridView::TYPE_DEFAULT
]
]); ?>
$searchModel修改如下:
created_at類型爲timestamp時:
public $created_at_c; //開始時間
public $created_at_e; //結束時間
public function rules()
{
return [
[['created_at','created_at_c', 'created_at_e'],'save']//修改created_at爲該規則,其他不變不然規則不合法則無法執行搜索
];
}
在search() 方法中加一下代碼可以實現查詢某個時間區間內的所有數據:
if ($this->created_at_c && $this->created_at_e) {
$create_start = strtotime($this->created_at_c);
$create_end = strtotime($this->created_at_e);
$query->andWhere(['between', 'created_at', $create_start, $create_end]);
}
created_at類型爲datetime時:
public $created_at_c; //開始時間
public $created_at_e; //結束時間
public function rules()
{
return [
[['created_at','created_at_c', 'created_at_e'],'save']
];
}
在search() 方法中加一下代碼可以實現查詢某個時間區間內的所有數據:
if ($this->created_at_c && $this->created_at_e) {
$query->andWhere(['between', 'created_at', $this->created_at_c, $this->created_at_e]);
}
優化:你可以對created_at_c和created_at_e做時間值校驗,保證時間格式和搜索值類型一致。