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