Yii2 DatePicker小部件筛选datetime字段
朋友们,我如何获得下面的DatePicker组件(在Yii2 Framewok中),过滤类型为Yii2 DatePicker小部件筛选datetime字段,yii2,Yii2,朋友们,我如何获得下面的DatePicker组件(在Yii2 Framewok中),过滤类型为datetime的字段?因为在组件中,我只能指定日期格式 \u search.php文件: <?php echo DatePicker::widget([ 'model' => $model, 'attribute' => 'start_date', 'attribute2' => 'end_date',
datetime
的字段?因为在组件中,我只能指定日期
格式
\u search.php文件:
<?php
echo DatePicker::widget([
'model' => $model,
'attribute' => 'start_date',
'attribute2' => 'end_date',
'language' => 'pt',
'type' => DatePicker::TYPE_RANGE,
'separator' => 'até',
'options' => [
'placeholder' => '',
],
'pluginOptions' => [
'autoclose'=>true,
'todayHighlight' => true,
'format' => 'yyyy-mm-dd',
]
]);
?>
如果我理解正确,您希望使用日期范围提交表单,该范围应使用给定范围过滤记录 查看您的
search()
方法,您似乎在搜索模型中声明了两个公共属性/字段,名称分别为start\u date
和end\u date
,您正在使用DatePicker
并尝试将范围与创建的列进行比较
您需要执行以下操作才能正确筛选记录
确保以下各项
ReportSearch
模型的safe
规则中声明了start\u date
和end\u date
- 您需要使用
\yii\db\Expression
将列中的日期转换为所需格式,并使用php:date
格式化给定的日期范围,即start\u date
和end\u date
在search()
方法中返回$dataProvider
之前,请添加以下内容
if ($this->start_date !== null && $this->end_date !== null) {
$query->andFilterWhere(
[
'BETWEEN',
new Expression(
'DATE_FORMAT(created,"%Y/%m/%d")'
),
date("Y/m/d", strtotime($this->start_date)),
date("Y/m/d", strtotime($this->end_date)),
]
);
}
注意:如果创建了列
并将其保存为时间戳
,则需要在现有查询中使用FROM_UNIXTIME
将字段名包装起来,如下图所示,否则,如果该列为日期
或日期时间
则上述操作有效
列类型为时间戳
完整的search()
方法如下所示
public function search($params)
{
$query = Report::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => [
'defaultOrder' => [
'created' => SORT_DESC,
]
],
'pagination' => [
'pageSize' => 100,
],
]);
$this->load($params);
if (!$this->validate()) {
return $dataProvider;
}
$query->andFilterWhere([
'id' => $this->id,
'created' => $this->created,
'updated' => $this->updated,
'closed' => $this->closed,
'user_id' => $this->user_id,
'status_id' => $this->status_id,
'location_id' => $this->location_id,
'typeperson_id' => $this->typeperson_id,
'field_cpfcnpj' => $this->field_cpfcnpj,
]);
if ($this->start_date !== null && $this->end_date !== null) {
$query->andFilterWhere(
[
'BETWEEN',
new Expression(
'DATE_FORMAT(created_at,"%Y/%m/%d")'
),
date("Y/m/d", strtotime($this->start_date)),
date("Y/m/d", strtotime($this->end_date)),
]
);
}
$query->andFilterWhere(['between', 'closed', $this->start_closed, $this->end_closed]);
return $dataProvider;
}
因此,您希望使用带有日期选择器的搜索文件表单按日期和时间选择过滤结果?我有datetime类型字段,希望过滤给定时间段内的所有记录(无论时间)@MuhammadOmerAslam从您正在使用的相对SearchModel
添加您的search()
方法,更新@MuhammadOmerAslam
if ($this->start_date !== null && $this->end_date !== null) {
$query->andFilterWhere(
[
'BETWEEN',
new Expression(
'DATE_FORMAT(FROM_UNIXTIME(created),"%Y/%m/%d")'
),
date("Y/m/d", strtotime($this->start_date)),
date("Y/m/d", strtotime($this->end_date)),
]
);
}
public function search($params)
{
$query = Report::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => [
'defaultOrder' => [
'created' => SORT_DESC,
]
],
'pagination' => [
'pageSize' => 100,
],
]);
$this->load($params);
if (!$this->validate()) {
return $dataProvider;
}
$query->andFilterWhere([
'id' => $this->id,
'created' => $this->created,
'updated' => $this->updated,
'closed' => $this->closed,
'user_id' => $this->user_id,
'status_id' => $this->status_id,
'location_id' => $this->location_id,
'typeperson_id' => $this->typeperson_id,
'field_cpfcnpj' => $this->field_cpfcnpj,
]);
if ($this->start_date !== null && $this->end_date !== null) {
$query->andFilterWhere(
[
'BETWEEN',
new Expression(
'DATE_FORMAT(created_at,"%Y/%m/%d")'
),
date("Y/m/d", strtotime($this->start_date)),
date("Y/m/d", strtotime($this->end_date)),
]
);
}
$query->andFilterWhere(['between', 'closed', $this->start_closed, $this->end_closed]);
return $dataProvider;
}