Yii2 时区:日期列根据格式更改值
Yii2 timezones: date column changes value depending on format
在我的 Yii + MySql 应用程序中,我有一个像这样的 DATE table 列:
start_date DATE
我有一个值:2020-01-01
。
问题是,当我在 GridView::widget
中显示数据库值“2020-01-01”时,我会根据格式得到不同的值。比如这一栏:
[
'class' => 'kartik\grid\DataColumn',
'attribute' => 'start_date',
'format' => ['date', 'php:d/m/Y G:i:s e P'],
],
显示 31/12/2019 23:00:00 UTC +00:00
。 绝对错误,因为它应该是“2020-01-01”(这是 DATE 列,而不是 DATETIME)。
虽然此专栏:
[
'class' => 'kartik\grid\DataColumn',
'attribute' => 'start_date',
],
显示 2020-01-01
。 这是正确的值。
我知道 MySql DATE 列假定时间为 00:00:00 我在一些(旧)文档中读到 Yii2 假定数据库中的所有日期都是 UTC,我认为这是错误的。
我在不同级别的时区配置是这样的:
- Unix 服务器:GMT+1 (CET)
- PHP (php.ini): 未设置
- Yii2 (main.php): 'timeZone' => 'Europe/Madrid' (也用 Europe/London 测试)
- MySql: @@global.time_zone / @@session.time_zone = 系统
- MySql:
select timediff(now(), utc_timestamp())
: 01:00:00
如何告诉 Yii2 数据库值与服务器一样处于 GMT+1,或者数据库值与时区无关?
谢谢
您可能需要将 Formatter::$defaultTimeZone
更改为 Europe/Madrid
- 这应该指定传递给格式化程序的日期不是 UTC,而是 Europe/Madrid
。
在我的 Yii + MySql 应用程序中,我有一个像这样的 DATE table 列:
start_date DATE
我有一个值:2020-01-01
。
问题是,当我在 GridView::widget
中显示数据库值“2020-01-01”时,我会根据格式得到不同的值。比如这一栏:
[
'class' => 'kartik\grid\DataColumn',
'attribute' => 'start_date',
'format' => ['date', 'php:d/m/Y G:i:s e P'],
],
显示 31/12/2019 23:00:00 UTC +00:00
。 绝对错误,因为它应该是“2020-01-01”(这是 DATE 列,而不是 DATETIME)。
虽然此专栏:
[
'class' => 'kartik\grid\DataColumn',
'attribute' => 'start_date',
],
显示 2020-01-01
。 这是正确的值。
我知道 MySql DATE 列假定时间为 00:00:00 我在一些(旧)文档中读到 Yii2 假定数据库中的所有日期都是 UTC,我认为这是错误的。
我在不同级别的时区配置是这样的:
- Unix 服务器:GMT+1 (CET)
- PHP (php.ini): 未设置
- Yii2 (main.php): 'timeZone' => 'Europe/Madrid' (也用 Europe/London 测试)
- MySql: @@global.time_zone / @@session.time_zone = 系统
- MySql:
select timediff(now(), utc_timestamp())
: 01:00:00
如何告诉 Yii2 数据库值与服务器一样处于 GMT+1,或者数据库值与时区无关?
谢谢
您可能需要将 Formatter::$defaultTimeZone
更改为 Europe/Madrid
- 这应该指定传递给格式化程序的日期不是 UTC,而是 Europe/Madrid
。