在我的系统中,数据库时间戳记录为UTC值。
每个用户的个人资料中都记录了一个时区。登录时,时区值会从其个人资料转移到其会话中($ session-> set('timezone',$ tz);)。
我的大多数代码都使用Sonata INTL捆绑包,因此用户可以看到正确显示其时区的日期时间值,除了在表单字段中。
我最近在一些Symfony2类型上发现了model_timezone和view_timezone字段。我可以让字段显示正确的值(如下面的代码片段所示),但是我想了解如何从用户会话中填充view_timezone? (我猜我可以通过某种方式传递$选项?)
Event Controller代码段:
$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',
));
答案 0 :(得分:5)
这个问题的解决方案有两个方面:
我已更新了我的代码段以反映所需的更改:
Event Controller代码段:
$object = <object loaded>;
$form = $this->createForm(new MyEventType(), $object, array(
'view_timezone' => $this->container->get('session')->get('timezone'))
);
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' => $options['view_timezone'],
));
...
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Stuff\CoreBundle\Entity\MyEvent',
'view_timezone' => 'UTC',
));
}