2016-09-03 10 views
2

作成したすべてのクイズが表示され、クイズと編集の詳細が表示されるテーブルで、ユーザーのタイムゾーンにクイズ時間を表示します。 ユーザーがクイズを作成すると、自分のタイムゾーンで時間を選択し、データベースにUTCに変換した時間を保存しますが、すべてのクイズが表示されたときにUTC時間が表示され、ユーザーのローカル時間。 IVEはビューで、これまで何をしユーザーのタイムゾーンの時間を表示します

/クイズ/ 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; 
     }, 

ITSは「は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

関連する問題