【问题标题】:How to set the timezone on sonata_type_datetime_picker如何在 sonata_type_datetime_picker 上设置时区
【发布时间】:2017-08-16 02:32:09
【问题描述】:

使用 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' => [

                ],
            ])

当我提交表单时,似乎日期时间是格林威治标准时间,所以我基本上损失了一个小时。

示例:当我编辑我的凭证时,更改日期并提交,这里是 10:00,我得到 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。我也尝试在奏鸣曲配置中设置时区,但到目前为止没有任何效果。

【问题讨论】:

标签: php symfony sonata-admin


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2015-06-01
    • 2014-11-16
    • 2019-10-19
    • 2020-04-25
    • 2015-09-27
    • 1970-01-01
    相关资源
    最近更新 更多