在我的数据库中,我以 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");
});
}
但我不确定这是大量模特的最佳方式......
答案 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部分,如果它给你一个错误