【问题标题】:Yii2 timezones: date column changes value depending on formatYii2 时区:日期列根据格式更改值
【发布时间】: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 中,或者数据库值与时区无关?

谢谢

【问题讨论】:

    标签: php mysql yii2 timezone


    【解决方案1】:

    您可能需要将Formatter::$defaultTimeZone 更改为Europe/Madrid - 这应该指定传递给格式化程序的日期不是UTC,而是Europe/Madrid

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多