在我的系统中,数据库时间戳记录为 UTC 值。
每个用户的个人资料中都记录了一个时区。登录时,时区值会从他们的配置文件传输到他们的会话( $session->set('timezone', $tz); )。
我的大部分代码都使用 Sonata INTL 捆绑包,因此用户可以看到其时区正确显示的日期时间值,但表单字段除外。
我最近在一些 Symfony2 类型上发现了 model_timezone 和 view_timezone 字段。我可以使字段显示正确的值(如下面的代码片段所示),但是我想了解如何从用户会话中填充 view_timezone?(我猜我可以通过某种方式传入 $options ?)
事件控制器片段:
$object = <object loaded>;
$form = $this->createForm(new MyEventType(), $object);
MyEventType 表单片段:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('id', null, array(
'label' => 'Event ID',
));
$builder->add('changed', 'datetime', array(
'date_widget' => 'single_text',
'date_format' => \IntlDateFormatter::SHORT,
'time_widget' => 'single_text',
'model_timezone' => 'UTC',
'view_timezone' => 'Pacific/Auckland',
));