如何以12小时格式在Symfony2表单上输入时间?

时间:2016-08-16 17:14:51

标签: symfony symfony-2.3

我正在尝试创建一个Symfony2表单,我需要输入一个事件开头的日期和时间,该事件以DateTime格式保存为属性。目前,使用24小时格式的下拉框输入时间。我试图将其更改为12小时格式。根据{{​​3}},Symfony TimeType不支持12小时格式。解决这个问题的一种方法是使用JQuery插件来输入时间,但我试图避免这种情况。最简单的方法是在上面链接的this post中的jarofgreen的评论中显示,他在TimeType.php中为Symfony供应商代码提出了一个小补丁。我尝试实现这个改变,它很有效。问题是我需要在不更改供应商代码的情况下执行此操作。相反,我决定按照建议post创建TimeType的扩展名。

我从vendor/symfony/symfony/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php中的供应商代码复制了TimeType.php,对其进行了必要的更改,并将其保存为src/AppBundle/Form/Type下的MyTimeType。问题是我尝试更改的属性属于DateTimeType格式,而不属于TimeType。据我所知,DateTimeType使用DateType和TimeType来创建DateTime对象。我的问题是,我需要对DateTimeType进行哪些更改,以便它将使用MyTimeType而不是TimeType来创建DateTime对象?

1 个答案:

答案 0 :(得分:0)

我们最终使用了bootstrap-datetimepicker库。它创建了一个12小时的下拉菜单,用于输入时间并以24小时格式保存时间。这种方法的唯一问题与时区有关。在我们的应用程序中,事件的开始时间与本地时区一起输入。时间以UTC格式保存在数据库中,时区保存在单独的字段中。在使用datetimepicker库之前,使用24小时下拉菜单输入时间并正确保存,并考虑了本地时区。添加datetimepicker后,当本地时区与php.ini中指定的系统时区不同时,时间不会正确转换为UTC。我们决定不花太多时间在这上面,最后删除了变量timezone字段。这不是最佳解决方案,但在这种情况下,能够以12小时格式输入时间比能够输入可变时区更为重要。