DatePicker小部件过滤日期时间字段

时间:2019-02-04 18:20:58

标签: yii2

朋友,我如何在下方(在Yii2 Framewok中)获取我的DatePicker组件,过滤类型为datetime的字段?由于在组件中,我只能指定date格式。

_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',
        ]
    ]);
?>

更新

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,
        ]);

        $query->andFilterWhere(['between', 'created', $this->start_date, $this->end_date]);

        $query->andFilterWhere(['between', 'closed', $this->start_closed, $this->end_closed]);

        return $dataProvider;
    }

1 个答案:

答案 0 :(得分:1)

如果我正确理解,您想使用日期范围提交表单,该日期范围应该使用给定范围过滤记录。

看着您search()的方法,好像您在搜索模型中声明了两个公共属性/字段,名称分别为start_dateend_date,与{{1 }},您正在尝试将范围与列DatePicker进行比较。

您需要执行以下操作才能正确过滤记录

请确保以下内容

  • createdstart_dateend_date模型的safe规则中声明。

  • 您需要使用ReportSearch将列中的日期转换为所需的格式,并使用\yii\db\Expression格式化给定的日期范围,即php:date和{ {1}}。

在通过start_date方法返回end_date之前添加以下内容

$dataProvider

注意:如果您将search()列另存为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)), ] ); } ,则需要像下面这样用created将字段名包装在现有查询中,否则,如果该列是{ {1}}或timestamp即可使用。

列类型为TIMESTAMP

FROM_UNIXTIME

您完整的DATE方法如下所示

DATETIME
相关问题