yii2将用户时区转换为数据库时区以进行保存

时间:2017-08-19 11:15:12

标签: yii2 timezone

使用yii2的格式化程序(见下文)将UTC(数据库)时间转换为用户时区很容易,但是,如何将用户时区转换回数据库时区?

我的配置文件如下:

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

要显示用户本地时区,只需拨打电话即可:

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

如何将其转换回来,以便在提交值时,我可以将其转换回UTC格式?

1 个答案:

答案 0 :(得分:0)

正如Thernys所建议的那样,用户提交了他们的本地时区,并在模型中进行了如下转换:

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 '';
    }
  }

然后在我的模型验证规则中执行此操作:

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)
   }]
 .....
];