使用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格式?
答案 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)
}]
.....
];