Yii2将时间保存为UTC到数据库,但显示在其他时区

kee*_*eeg 5 php yii yii2

有没有一种简单的方法可以在UTC中保存日期和时间,但是在显示日期和时间以将其转换为特定时区时呢?我已经添加

'formatter'  => [
    'class' => 'yii\i18n\Formatter',
    'timeZone'        => 'America/New York',
],
Run Code Online (Sandbox Code Playgroud)

对于我的配置,但现在所有内容都保存为数据库的EST时区。我希望数据库始终为UTC,并控制在php中打印时间和日期时要显示的时区。

基本上,我希望formatter有一个用于控制进入数据库的格式的单独设置,以及另一个用于控制显示目的的格式的设置(因为用户可以位于不同的时区)。

Bor*_*vic 2

你使用的是 Yii 还是 Yii2?

对于 Yii2,首先为您的应用程序设置时区,例如:

$config = [
    'timeZone' => 'Europe/London',
    // other config goes here
];
Run Code Online (Sandbox Code Playgroud)

每次使用 PHP 日期函数时,日期都会自动转换为该时区。请注意,strtotime 始终使用 UTC 时间返回秒数,这是常见错误。

将日期保存到数据库时,可以使用格式化程序获取 UTC 时间的日期,例如:

$model->date = Yii::$app->formatter->asTime('2014-10-06 14:41:00 UTC');
Run Code Online (Sandbox Code Playgroud)

当输出时区时,只需使用没有时区的格式化程序的 PHP 日期函数,您将获得配置文件中设置的时区中的日期。例如:

echo date("d. M. Y.", $your_date);
Run Code Online (Sandbox Code Playgroud)