Yii2 DatePicker小部件筛选datetime字段

Yii2 DatePicker小部件筛选datetime字段,yii2,Yii2,朋友们,我如何获得下面的DatePicker组件(在Yii2 Framewok中),过滤类型为datetime的字段?因为在组件中,我只能指定日期格式 \u search.php文件: <?php echo DatePicker::widget([ 'model' => $model, 'attribute' => 'start_date', 'attribute2' => 'end_date',

朋友们,我如何获得下面的DatePicker组件(在Yii2 Framewok中),过滤类型为
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;
}