Usage scenarios: to achieve a time interval to filter the data in the search bar girdView
Following are the common block:
<?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 amended as follows:
created_at type is timestamp:
public $created_at_c; //开始时间
public $created_at_e; //结束时间
public function rules()
{
return [
[['created_at','created_at_c', 'created_at_e'],'save']//修改created_at为该规则,其他不变不然规则不合法则无法执行搜索
];
}
Plus the search () method in the code to query all data can be achieved within a certain time interval:
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 type is datetime:
public $created_at_c; //开始时间
public $created_at_e; //结束时间
public function rules()
{
return [
[['created_at','created_at_c', 'created_at_e'],'save']
];
}
Plus the search () method in the code to query all data can be achieved within a certain time interval:
if ($this->created_at_c && $this->created_at_e) {
$query->andWhere(['between', 'created_at', $this->created_at_c, $this->created_at_e]);
}
Optimization: You can do a check on the time value created_at_c and created_at_e, to ensure a consistent format and search time value types.
The official document: https://demos.krajee.com/date-range