2017-08-19 16 views
0

yii2のフォーマッタ(下記参照)を使用してUTC(データベース)時間をユーザーのタイムゾーンに変換するのは簡単ですが、ユーザーのタイムゾーンをデータベースのタイムゾーンに戻すにはどうすればいいですか?次のようにyii2はユーザーのタイムゾーンを保存するためにデータベースに変換します

私の設定ファイルは次のとおりです。

echo Yii::$app->formatter->asDatetime($model->date_created); 

をするように、彼らが提出したときにあなたが戻ってそれを変換するにはどうすればよい:

.... 
'formatter' => [ 
    'class' => 'yii\i18n\Formatter', 
    'defaultTimeZone'=>'UTC',// for saving values in the database    
    'timeZone'=>'America\New_York', // for displaying timezones 
],.... 

は、ユーザーにローカルのタイムゾーンを表示するには、それだけで呼び出すことは簡単です私はそれをUTC形式に変換することができますか?

+0

私のモデルの検証ルールで
protected function convertToServerDate($date, $format = 'n/j/Y g:i A', $userTimeZone = 'America/Los_Angeles', $serverTimeZone = 'UTC') { try { $dateTime = new DateTime ($date, new DateTimeZone($userTimeZone)); $dateTime->setTimezone(new DateTimeZone($serverTimeZone)); return $dateTime->format($format); } catch (Exception $e) { return ''; } } 

、その後、これを行いますあなたが保存したいものや方法を具体的にする必要があります。 – Bizley

+0

あなたは、(入力にタイムゾーン情報が含まれていると仮定して)必要なときに、 '\ Yii :: $ app-> formatter-> timeZone = 'UTC';を設定することができます。しかし、私はフォーマッタとは思えませんこの種の使用を実際に意図しています。代わりに、[DateTime](http://php.net/manual/en/class.datetime.php)を使用して調べることができます。これは、ユーザーからの時間データとともにタイムゾーンとともに初期化することができます。タイムゾーンとフォーマットを好きなように変換したり、データベースに保存する場合はUNIXのタイムスタンプを使用してください。 – Thernys

答えて

0

Thernysによって示唆されるように、ユーザーは自分のローカルタイムゾーンを提出し、以下のように、それがモデルに変換されます:あなたは

public function rules(){ 
    return [ 
    ..... 
    [['datetimeattribute'],'filter','filter'=>function($value){ 
    return $this->convertToServerDate($value,'Y-m-d H:i:s',Yii::$app->formatter->timeZone,Yii::$app->formatter->defaultTimeZone) 
    }] 
..... 
]; 
関連する問題