【问题标题】:Wrong timezone in GridView yii2GridView yii2 中的时区错误
【发布时间】:2016-12-16 08:23:10
【问题描述】:

您好,我在时区方面遇到了一些问题。我的时区是亚洲/新西伯利亚。

在 index.php 中设置时区和 yii 格式化输出:

\Yii::$app->formatter->timeZone // Asia/Novosibirsk

所以在 yii\grid\GridView winget 我有相同日期的下一列(date_add):

            [
              'attribute' => 'date_add',
              'format' => ['date', 'full']
            ],
            'date_add:datetime',
            [
              'attribute' => 'date_add',
              'value' => function($row){
                return \Yii::$app->formatter->asDatetime(new DateTime($row->date_add), 'full');
              }
            ],

输出不同的值:

只有第三列是正确的,12 月 14 日(原始日期是 2016-12-14 17:00:00)。

我假设 GridView 有自己的 timeZone(或格式化程序类实例)

【问题讨论】:

    标签: php gridview yii2


    【解决方案1】:

    GridView 正在使用formatter 组件(您可以在 GridView 中更改它的设置或在应用程序配置中更改整个应用程序的设置),因此只需修改时区,一切都应该正常工作。

    仅用于 GridView 设置:

    <?= GridView::widget([
        // ...
        'formatter' => [
            'class' => 'yii\i18n\Formatter',
            'timeZone' => 'Asia/Novosibirsk'
        ],
        // ...
    ]) ?>
    

    对于整个应用程序(基本项目模板中的config/web.php等配置文件,formatter的设置):

    return [
        // ...
        'components' => [
            // ...
            'formatter' => [
                'class' => 'yii\i18n\Formatter',
                'timeZone' => 'Asia/Novosibirsk'
            ],
        ],
    ];
    

    或应用范围:

    return [
        // ...
        'timeZone' => 'Asia/Novosibirsk'
        // ...
    ];
    

    【讨论】:

    • 我已经在主配置属性 timeZone 但它没有效果。 \Yii::$app->格式化程序返回正确的时区
    • 如果我在 GridView 中直接 输入格式化程序配置,那就太没有效果了
    • 您是否更改了格式化程序组件中的defaultTimeZone?您的数据库的时区是什么?
    • 默认时区为 UTC。但我假设 MySQL 服务器时区是 GMT + 0
    • GMT+0 给出与 UTC 相同的结果。我猜你的数据库在不同的时区。请仔细检查。当您使用DateTime 时,日期会自动转换为您系统的时区。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多