如何在sonata_type_datetime_picker上设置时区

时间:2017-03-23 13:39:04

标签: php symfony sonata-admin

使用stackoverflow多年后的第一个问题。多年来感谢所有答案。

我的sonata_type_datetime_picker存在问题。

我的php.ini时区设置为欧洲/巴黎。

在我的奏鸣曲管理员中,我有一张表格可以为凭证设置日期开始和日期结束。

            ->with('Conditions',['translation_domain' => 'SmallableAdminBundle'])
            ->add('startAt', 'sonata_type_datetime_picker', [
                'label' => 'form.commercialvoucher.startAt',
                'translation_domain' => 'SmallableAdminBundle',
                'format' => 'dd/MM/yyyy HH:mm',
                'attr' => [

                ],
            ])
            ->add('endAt', 'sonata_type_datetime_picker', [
                'label' => 'form.commercialvoucher.endAt',
                'translation_domain' => 'SmallableAdminBundle',
                'format' => 'dd/MM/yyyy HH:mm',
                'attr' => [

                ],
            ])

当我提交表格时,似乎日期时间是GMT时间,所以我基本上丢失了一个小时。

示例:当我编辑我的凭证时,更改日期并提交,此处为10h00,我得到9:00。

    CRUDController.php on line 362:
CommercialVoucher {#241 ▼
      #id: 537287
      #code: "TEST_time"
      #name: "TEST_time"
      #description: "TEST_time"
      #validated: true
      #startAt: DateTime {#2791 ▼
        +"date": "2014-12-22 09:02:00.000000"
        +"timezone_type": 1
        +"timezone": "+00:00"
      }
      #endAt: DateTime {#2794 ▼
        +"date": "2014-12-22 09:00:00.000000"
        +"timezone_type": 1
        +"timezone": "+00:00"
      }

当我对凭证进行其他更改,保持日期不变时,我会得到正确的时区。

    CRUDController.php on line 362:
CommercialVoucher {#241 ▼
  #id: 537287
  #code: "TEST_time"
  #name: "TEST_time"
  #description: "TEST_time"
  #validated: true
  #startAt: DateTime {#1397 ▼
    +"date": "2014-12-22 09:02:00.000000"
    +"timezone_type": 3
    +"timezone": "Europe/Paris"
  }
  #endAt: DateTime {#1398 ▼
    +"date": "2014-12-22 09:00:00.000000"
    +"timezone_type": 3
    +"timezone": "Europe/Paris"
  }

我在我的凭证管理员中尝试了很多,使用选项格式date_format。我也尝试在sonata配置中设置时区,但到目前为止没有任何工作。

1 个答案:

答案 0 :(得分:-1)

我尝试了不同的替代解决方案。

我最好的选择是用默认的symfony小部件替换奏鸣曲日期选择器。

                ->add('startAt', 'datetime', [
                'date_widget'       => 'single_text',
                'time_widget'       => 'single_text',
                'label' => 'form.commercialvoucher.startAt',
                'translation_domain' => 'SmallableAdminBundle',
                'attr' => [

                ],
            ])

我还在我的实体中初始化日期值,因此用户通常只会更改日期和月份。

    $startAt = new \DateTime('now');
    $endAt = new \DateTime('now');

    $startAt->setTime(0, 0, 0);
    $this->setStartAt($startAt);
    $endAt->setTime(23, 59, 59);
    $this->setEndAt($endAt);

DateTime widget on the left

Date and Time picker