如何使搜索过滤器与 Yii2 中的格式化日期一起使用?
How to make search filters work with formatted dates in Yii2?
$query->andFilterWhere(['like', 'date_of_birth', date('d-m-Y',strtotime($this->date_of_birth))]);
没用..
¿您在使用 MySQL 吗?则日期格式为:YYYY-MM-DD。这就是 MySQL 的工作方式,您无法更改它。
您可以在您的网站和表单上以您想要的格式显示日期,但您必须将其传递给 MYSQL,因为 MYSQL 期望收到它。所以你应该做的是:
在你的模型中 class:
public function beforeSave($insert) {
/* for example if my form date format is: dd-mm-yyyy
You must change it for yyyy-mm-dd before saving into DDBB */
if (!empty($this->date_of_birth )) {
$this->date_of_birth = Yii::$app->formatter->asDate($this->date_of_birth, 'php:Y-m-d');
}
return parent::beforeSave($insert);
}
查看文档以获取更多信息:
https://www.yiiframework.com/doc/api/2.0/yii-db-baseactiverecord#beforeSave()-detail
为了在您的表单和视图中再次显示此日期:
<?php
$model->date_of_birth = !empty($model->date_of_birth) ? Yii::$app->formatter->asDate($model->date_of_birth, 'php:d-m-Y') : null;
?>
更新:
要使过滤器在(例如)格式化日期时在 gridview 中工作,您应该修改 YourModelSearch.php 模型中的比较 class:
来自这里:
$query->andFilterWhere(['date_of_birth' => $this->date_of_birth]);
为此:
/* Change the format to MySQL Date Format when compares */
$query->andFilterWhere(['date_of_birth' => Yii::$app->formatter->asDate($this->date_of_birth, 'php:Y-m-d')]);
在你的 config/web.php 你应该有这样的东西:
'components' => [
...
'formatter' => [
'class' => 'yii\i18n\Formatter',
'timeZone' => 'Europe/London',
'defaultTimeZone' => 'Europe/London',
'dateFormat' => 'd/M/Y',
'datetimeFormat' => 'd/M/Y H:m',
'timeFormat' => 'H:m:s',
'decimalSeparator' => ',',
'thousandSeparator' => '',
'currencyCode' => 'EUR',
'locale'=>'es_ES'
],
...
]
永远不要对 Date 类型使用 LIKE 比较器。
$query->andFilterWhere(['like', 'date_of_birth', date('d-m-Y',strtotime($this->date_of_birth))]);
没用..
¿您在使用 MySQL 吗?则日期格式为:YYYY-MM-DD。这就是 MySQL 的工作方式,您无法更改它。
您可以在您的网站和表单上以您想要的格式显示日期,但您必须将其传递给 MYSQL,因为 MYSQL 期望收到它。所以你应该做的是:
在你的模型中 class:
public function beforeSave($insert) {
/* for example if my form date format is: dd-mm-yyyy
You must change it for yyyy-mm-dd before saving into DDBB */
if (!empty($this->date_of_birth )) {
$this->date_of_birth = Yii::$app->formatter->asDate($this->date_of_birth, 'php:Y-m-d');
}
return parent::beforeSave($insert);
}
查看文档以获取更多信息:
https://www.yiiframework.com/doc/api/2.0/yii-db-baseactiverecord#beforeSave()-detail
为了在您的表单和视图中再次显示此日期:
<?php
$model->date_of_birth = !empty($model->date_of_birth) ? Yii::$app->formatter->asDate($model->date_of_birth, 'php:d-m-Y') : null;
?>
更新:
要使过滤器在(例如)格式化日期时在 gridview 中工作,您应该修改 YourModelSearch.php 模型中的比较 class:
来自这里:
$query->andFilterWhere(['date_of_birth' => $this->date_of_birth]);
为此:
/* Change the format to MySQL Date Format when compares */
$query->andFilterWhere(['date_of_birth' => Yii::$app->formatter->asDate($this->date_of_birth, 'php:Y-m-d')]);
在你的 config/web.php 你应该有这样的东西:
'components' => [
...
'formatter' => [
'class' => 'yii\i18n\Formatter',
'timeZone' => 'Europe/London',
'defaultTimeZone' => 'Europe/London',
'dateFormat' => 'd/M/Y',
'datetimeFormat' => 'd/M/Y H:m',
'timeFormat' => 'H:m:s',
'decimalSeparator' => ',',
'thousandSeparator' => '',
'currencyCode' => 'EUR',
'locale'=>'es_ES'
],
...
]
永远不要对 Date 类型使用 LIKE 比较器。