过滤yii2中的数据后,如何更改筛选搜索标签中的日期格式?

过滤yii2中的数据后,如何更改筛选搜索标签中的日期格式?,yii2,Yii2,我在Yi2框架中工作,我想显示日期格式mm/dd/yyyy,但在我的数据库中格式是yyyy-mm-dd。在模型搜索中,我转换了格式mm/dd/yy,并得到了结果。在felter搜索标签中显示为yyyy mm dd后,我想显示mm/dd/yyyy格式。请给出建议 用户搜索模型 $query = User::find(); $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); $query->

我在Yi2框架中工作,我想显示日期格式mm/dd/yyyy,但在我的数据库中格式是yyyy-mm-dd。在模型搜索中,我转换了格式mm/dd/yy,并得到了结果。在felter搜索标签中显示为yyyy mm dd后,我想显示mm/dd/yyyy格式。请给出建议

用户搜索模型

$query = User::find();
$dataProvider = new ActiveDataProvider([
      'query' => $query,
    ]);

$query->andFilterWhere(['like', 'start_date', trim($this->start_date)])

return $dataProvider;
index.php

<?= GridView::widget([
       'dataProvider' => $dataProvider,
        'tableOptions' => ['class' => 'table table-bordered table-hover '],
         'headerRowOptions' => [
               'class' => 'thead-light',
          ],
          'rowOptions' =>function($model){
                 if($model->status == 0){
                     return ['class' =>'inactive-border-color',];
                  }
            },
            'filterModel' => $searchModel,
             'columns' => [
                   [
                        'attribute' => 'start_date',
                         'format' => 'date',
                         'value' => 'termination_date',
                          'filterInputOptions' => [
                                 class'       => 'form-control',
                                 'placeholder' => 'MM/DD/YYYY'
                           ],
                    ],
              ]
]); ?>

使用
UserSearch
模型创建数据提供程序后,其
$start\u date
中的值不再用于过滤,因此您可以将其更改为输出所需的格式。在创建数据提供程序和呈现视图之间的任意位置,只需在控制器的操作中添加以下代码

$searchModel->start_date = \Yii::$app->formatter->asDate($searchModel->start_date);
另一个选项是,不转换$start_date属性中的值,而只在创建数据提供程序时进行转换,如下所示:

public function createDataProvider()
{
    $query = User::find();
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    $query->andFilterWhere(['like', 'start_date', $this->normalizeDate($this->start_date)]);

    return $dataProvider;
}

protected function normalizeDate($date)
{
    //your code to convert date
    return $convertedDate;
}

使用
UserSearch
模型创建数据提供程序后,其
$start\u date
中的值不再用于过滤,因此您可以将其更改为输出所需的格式。在创建数据提供程序和呈现视图之间的任意位置,只需在控制器的操作中添加以下代码

$searchModel->start_date = \Yii::$app->formatter->asDate($searchModel->start_date);
另一个选项是,不转换$start_date属性中的值,而只在创建数据提供程序时进行转换,如下所示:

public function createDataProvider()
{
    $query = User::find();
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    $query->andFilterWhere(['like', 'start_date', $this->normalizeDate($this->start_date)]);

    return $dataProvider;
}

protected function normalizeDate($date)
{
    //your code to convert date
    return $convertedDate;
}

可能重复的可能重复您可以使用
new\yii\db\Expression('DATE_格式(enddate,“%d.%m.%Y”))
将列格式化并与给定的日期和所需的日期匹配format@MuhammadOmerAslam尽管这在某些情况下可能有效,但情况并不相同。在mysql中,当您使用特定运算符将日期列与常量字符串进行比较时,值将转换为long int进行比较。日期\格式的返回值为字符串。如果使用该选项,将在两个字符串之间进行比较,这可能会导致不同的结果。但是,它将与本例中使用的fine with LIKE运算符一起工作。我说的是使用
yii\db\Expression
类内联,因为列可能使用DateTime而不是Date only,您只想比较日期部分,是的,我同意它作为字符串进行比较的比较部分,在这种情况下,我们可以执行
date(start_date)
,这使得
和filterwhere(['>',新表达式('date(start_date')),新表达式(“date'$this->start_date'))
或您想使用的任何其他运算符您只需使用
new\yii\db\Expression('DATE\u格式(enddate,“%d.%m.%Y”))
将列格式化并与给定日期和所需日期匹配format@MuhammadOmerAslam尽管在某些情况下可能会起作用,但情况不同。在mysql中,当您使用特定运算符将日期列与常量字符串进行比较时,值会转换为长整型以进行比较。日期\格式的返回值为字符串。如果您使用比较将在两个字符串之间进行,这可能会导致不同的结果。但是,它将使用本例中使用的fine with LIKE运算符。我说的是使用
yii\db\Expression
类内联,因为列可能使用DateTime而不是Date only,并且您只希望比较日期部分,以及是的,我同意它作为字符串进行比较的比较部分,在这种情况下,我们可以执行
date(start\u date)
,这使得
和过滤器在哪里(['>',新表达式('date(start\u date')),新表达式(“date'$this->start\u date'))]
或您要使用的任何其他操作员