@hollanditkzn

Как мне сделать поиск записей в grid по дате в формате dd.mm.yyyy?

Использую 2 виджета
"kartik-v/yii2-widgets": "^3.4",
        "kartik-v/yii2-field-range": "^1.3"

Но в таком формате даты yyyy-mm-dd она записи нормально выводит от поиска, в таком формате dd.mm.yyyy ничего вообще не происходит. Указывается в ajax что 200 код и нет никаких ошибок.
Моя реализация в UserSearch
<?php
....
class UserSearch extends User
{
    public $nameEmployee;
    public $date_from;
    public $date_to;
  
    public function rules()
    {
        return [
            ...
            [['date_from', 'date_to'], 'date', 'format' => 'php:Y-m-d']
        ];
    }
    public function scenarios()
    {
        return Model::scenarios();
    }
    public function search($params)
    {
        $query = User::find()->where(['active' => User::WORK]);

        // add conditions that should always apply here

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
...

        $query->andFilterWhere(['like', 'username', $this->username])
            ...
/** Вот тут должно конвертировать в любом случае что пришло в таком формате 2017-09-10 что пришло в таком формате 10.09.2017, верно же? она все равно будет в unix формате */
            ->andFilterWhere(['>=', 'created_at', $this->date_from ? strtotime($this->date_from.' 00:00:00') : null])
            ->andFilterWhere(['<=', 'created_at', $this->date_to ? strtotime($this->date_to.' 23:59:59') : null]);

        return $dataProvider;
    }
}

И в gridview
[
                    'filter' => DatePicker::widget([
                        'model' => $searchModel,
                        'attribute' => 'date_from',
                        'attribute2' => 'date_to',
                        'type' => DatePicker::TYPE_RANGE,
                        'separator' => '-',
                        'pluginOptions' => ['format' => 'dd.mm.yyyy'],
                    ]),
                    'attribute' => 'created_at',
                    'format' => 'datetime',
                    'label' => 'Дата приема'
                ],
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
proudmore
@proudmore
У вас MySQL?
Если да, то mysql воспринимает тип date только в формате Y-m-d. Я у себя проблему решаю на уровне модели поиска следующим образом:
$query->andFilterWhere([
            'birth_date' => $this->birth_date ? \Yii::$app->formatter->asDate($this->birth_date, 'php:Y-m-d') : null,
        ]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы