【发布时间】:2020-02-06 09:50:02
【问题描述】:
在我的 Yii + MySql 应用程序中,我有一个这样的 DATE 表列:
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'(也在欧洲/伦敦测试过)
- MySql:@@global.time_zone / @@session.time_zone = SYSTEM
- MySql:
select timediff(now(), utc_timestamp()):01:00:00
我如何告诉 Yii2 数据库值与服务器一样在 GMT+1 中,或者数据库值与时区无关?
谢谢
【问题讨论】: