2016-12-16 73 views
1

你好我有一些时区的问题。我的时区是亚洲/新西伯利亚。GridView中错误的时区yii2

在组的index.php和时区格式化YII输出:

\Yii::$app->formatter->timeZone // Asia/Novosibirsk 
警予\电网

所以\ GridView的温格特我有同样的日期(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'); 
       } 
      ], 

输出不同的值: enter image description here

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

我假定,GridView控件有所在时区(或格式化类的实例)

回答

0

GridView控件使用formatter组件(你可以改变它在GridView控件或应用程序配置整个应用程序的设置),所以只需要修改的时间区域和一切应该正常工作。

对于刚刚在GridView设置:

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

对于整个应用程序(formatter在基础工程模板配置文件中像config/web.php,设置):

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

或应用广泛:

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

我已经在主配置属性timeZone但它没有效果。 \ Yii :: $ app-> formatter返回正确的时间区域 – Adobe

+0

如果我直接在** GridView **中输入格式化程序配置**,那么它不会有效果 – Adobe

+0

您是否更改了格式化程序组件中的'defaultTimeZone'?什么是数据库的时区? – Bizley