Часовые пояса Yii2: столбец даты меняет значение в зависимости от формата - PullRequest
1 голос
/ 06 февраля 2020

В моем приложении Yii + MySql у меня есть столбец таблицы DATE, например:

start_date DATE

И у меня есть значение: 2020-01-01.

Проблема в том, когда я показываю значение базы данных '2020-01-01' в GridView::widget, я получаю разные значения в зависимости от формата. Например, этот столбец:

[
    '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 предполагает, что все даты в базе данных являются UT C, что, на мой взгляд, неверно.

Моя конфигурация часового пояса на разных уровнях выглядит следующим образом:

  • 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, как сервер, или что значения базы данных являются независимыми от часового пояса c?

Спасибо

1 Ответ

1 голос
/ 06 февраля 2020

Вам может потребоваться изменить Formatter::$defaultTimeZone на Europe/Madrid - это должно указать, что дата, передаваемая в форматировщик, не UT C, а Europe/Madrid.

...