Yii2:在用户时区显示日期

时间:2018-03-07 11:50:41

标签: php date yii yii2

在我的数据库中,我以 UTC格式存储所有datetime字段。此外,我可以更改用户的默认时区。每个用户都可以拥有自己的时区,与UTC 不同。

在这种情况下,如何显示所有模型datetime字段?

我有个主意。要为每个ActiveRecord模型执行此操作:

public function init()
{
    parent::init();

    $this->on(ActiveRecord::EVENT_AFTER_FIND, function($event) {

        $this->created_date = (new \DateTime('now', new \DateTimeZone("Europe/Kiev")))->format("Y-m-d H:i:s");

    });
}

但我不确定这是大量模特的最佳方式......

2 个答案:

答案 0 :(得分:1)

如果日期存储在UTC中,为什么不随时间附加字符串UTC并显示

$time = strtotime($this->created_at.' UTC');
date("Y-m-d H:i:s", $time);

您的代码将如下所示

public function init()
{
    parent::init();

    $this->on(ActiveRecord::EVENT_AFTER_FIND, function($event) {
        $time = strtotime($model->create_at.' UTC');
        $this->created_date = date("Y-m-d H:i:s", $time);

    });
}

如果我这样做,我只会创建一个单独的Helper并使用它以本地格式显示日期,而不是EVENT_AFTER_FIND

另一种方法是使用此Extension

答案 1 :(得分:0)

搜索 frontend / config / main.php

尝试加入

return [
...
'components' => [
...

这样的FORMATTER部分
        'formatter' => [
          'dateFormat' => 'dd/MM/yyyy',
          'datetimeFormat' => 'dd/MM/yyyy H:i:s',
          'timeFormat' => 'H:i:s',
          'locale' => 'it-IT',            
          'decimalSeparator' => ',',
          'thousandSeparator' => '.',
          'currencyCode' => 'EUR',
          'numberFormatterSymbols' => [
               NumberFormatter::CURRENCY_SYMBOL => '€',
           ],            
           'timeZone' => 'Europe/Rome',
         ],  

设置TimeZone,Currency等参数......

注意:我不记得了,但也许NumberFormatter部分需要其他一些设置,所以删除numberFormatterSymbols部分,如果它给你一个错误