使用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配置中设置时区,但到目前为止没有任何工作。
答案 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);