Kartik DateRangePicker с двумя атрибутами вызывает invalidDateFormat и NaN при выборе даты диапазона

У меня есть вопрос о виджете Kartik DateRangePicker, который я использую в своем представлении сетки для фильтрации некоторых результатов.

в моей SearchModel я создал два атрибута

    public $date_start;
    public $date_end;

я использую их для фильтрации поля в базе данных 'insert_date'.

На мой взгляд, в качестве конфигурации сетки я установил эти параметры

[
            'attribute' => 'insert_date',
            'options' => ['class' => 'gridview-date-column'],
            'filter' => DateRangePicker::widget([
                'model' => $searchModel,
                'name' => 'insert_date',
                'attribute' => 'insert_date',
                'startAttribute' => 'date_start',
                'endAttribute' => 'date_end',
                'convertFormat'=>true,
                'pluginOptions' => [
                    'opens'=>'right',
                    'locale' => [
                        'cancelLabel' => 'Clear',
                        'format' => 'd-m-Y',
                    ],
                ]
            ]),
            'format' => ['date', Yii::$app->formatter->datetimeFormat],
            'contentOptions'=>['style'=>'min-width: 200px;'] 
        ],

По умолчанию $date_start и $date_end не имеют значения, поэтому, когда я вхожу в свое представление и пытаюсь отфильтровать это поле, я получаю ошибку «invalidDate» и серию NaN в календарях.

Это исправлено, если я устанавливаю значение для этих двух полей или удаляю их из конфигурации (поэтому я могу использовать только атрибут insert_date как строку с этими двумя диапазонами для фильтрации).

Просматривая репозиторий плагинов, я нашел такой же случай и как ответ автора

Эта проблема возникает из-за того, что у вас недопустимый формат даты для данных, который не соответствует формату подключаемого модуля.

Но поскольку эти поля пусты, они никогда не могут иметь правильный формат данных.

У кого-то была такая же проблема? Заранее спасибо за все ответы.


person giovaZ    schedule 28.06.2017    source источник


Ответы (1)


У меня есть решение:

В плагине Kartik есть модель поведения, которую я могу включить в свою модель поиска:

use kartik\daterange\DateRangeBehavior;

Затем я могу создать его экземпляр, переопределяя метод поведения():

public $date_start;
public $date_end;

public function behaviors() {
    return [
        [
            'class' => DateRangeBehavior::className(),
            'attribute' => 'insert_date',
            'dateStartAttribute' => 'date_start',
            'dateEndAttribute' => 'date_end',
            'dateStartFormat' => 'd-m-Y',
            'dateEndFormat' => 'd-m-Y',

        ]
    ];
}

и в методе search():

public function search($params)
{
   // Some other filters
   if($this->date_start && $this->date_end) {
      // filtered query
   }
}

Надеюсь, это может помочь кому-то другому.

person giovaZ    schedule 03.07.2017