2016-09-03 3 views
2

사용자가 만든 시간대에 퀴즈 시간을 표시하려는 테이블과 퀴즈 및 편집의 세부 정보를 볼 때 사용합니다. 사용자가 퀴즈를 만들면 시간대가있는 시간을 선택하고 데이터베이스에 저장 한 시간을 UTC 시간으로 변환하지만 모든 쿼리스가있는 테이블이 표시되면 UTC 시간이 표시되고 사용자의 현지 시간으로 표시하려고합니다 . 필자가보기에 지금까지 무슨 짓을보기에 사용자의 시간대로 시간 표시

/퀴즈/index.php에

'attribute'=>'active_from', 
     'value'=>function ($model, $key, $index, $widget) { 
      $userTZ= new \DateTimeZone(Userzone::find()->where(['userUserId' => Yii::$app->user->id])->one()->timezone); 
      $date = new \DateTime($model->active_from, $userTZ); 
      return $date; 
     }, 

그는 "반드시 htmlspecialchars() 매개 변수 1 주어진 문자열, 객체가 될 것으로 기대" 이보기에 같은 일을 했습니까라는 오류를 보여줍니다 .php이며 같은 오류가 표시됩니다.

답변

2

Yii 2에는 formatter 구성 요소가 있습니다.

$timezone = 'UTC'; // default timezone 
// change timezone for non-guests only 
if (!Yii::$app->user->isGuest) { 
    $userzone = Userzone::find()->where(['userUserId' => Yii::$app->user->id])->limit(1)->one(); 
    // check first if data is present 
    if (!empty($userzone->timezone)) { 
     $timezone = $userzone->timezone; 
    } 
} 
// set timezone for formatter 
Yii::$app->formatter->timeZone = $timezone; 

// now display the date in this timezone 
echo Yii::$app->formatter->asDatetime($model->active_from); 

이있는 사용자가 로그인 그래서 당신이마다 할 필요가 없습니다 때 적절한 시간대에 포맷터를 초기화하는 과정 좋습니다.

사용자가 입력 한 시간대를 가져 와서 포맷터에서 설정하는 과정이 완료된 yii\i18n\Formatter 클래스를 직접 확장하는 방법 중 하나는 init() 메소드입니다. YII 2 docsGuide에 포맷터에 대한

// ... 
'components' => [ 
    // ... 
    'formatter' => [ 
     'class' => 'your\class\namespace\for\Formatter' 
    ], 
], 

더 : 이제 당신이 할 필요가 같은 클래스를 사용하려면이 구성 요소를 구성하는 것입니다.

+0

알았어,하지만 내 질문은이 포맷터를 초기화하고 변환해야하는 다른 필드에서 호출하는 방법입니다? – changez

관련 문제