过滤yii2中的数据后,如何更改筛选搜索标签中的日期格式?
我在Yi2框架中工作,我想显示日期格式mm/dd/yyyy,但在我的数据库中格式是yyyy-mm-dd。在模型搜索中,我转换了格式mm/dd/yy,并得到了结果。在felter搜索标签中显示为yyyy mm dd后,我想显示mm/dd/yyyy格式。请给出建议 用户搜索模型过滤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->
$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'))]
或您要使用的任何其他操作员