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



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

我的配置文件如下:

....
'formatter' => [
'class' => 'yiii18nFormatter',
'defaultTimeZone'=>'UTC',// for saving values in the database            
'timeZone'=>'AmericaNew_York', // for displaying timezones
],....

要显示用户的本地时区,只需调用:

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

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

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

最新更新