在表单中使用我的日期时间字段有点奇怪。 我刚刚将php版本更新为5.5.29
表单字段:
$customerReportForm->add('dateTo', 'date', [
'data' => new \DateTime(),
'required' => false,
'widget' => 'single_text',
'label' => 'До',
'attr' => array('class' => 'datepicker', "data-date-format" => "yy-mm-dd")
]);
在开发控制台中,我看到表单[dateTo]:2015-09-18 当我转储表格数据(提交后)时,我会看到我选择前一天的日期:
2015年9月17日
["dateTo"]=> object(DateTime)#436 (3) { ["date"]=> string(26) "2015-09-17 23:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Moscow" }
在控制台日期命令中显示正确的日期:
-> % date
Pn Rgs 18 13:00:29 MSK 2015
在表单中,我尝试添加:'format'=> 'MM / dd / yyyy',它没有帮助,发布数据:表格[dateTo]:09/18/2015
UPD
感谢John Noel,将时区重新配置为UTC 和
'model_timezone' => 'UTC',
'view_timezone' => 'UTC',
形式解决了我的问题。
答案 0 :(得分:1)
这听起来很像时区或语言环境问题。
可以使用表单字段中的two options model_timezone
和view_timezone
来检查前者,例如
$customerReportForm->add('dateTo', 'date', [
// ...
'model_timezone' => 'UTC',
'view_timezone' => 'UTC',
]);
尝试以UTC的方式设置时区,看看是否仍然遇到同样的问题。接下来,尝试查看您的系统(而不是PHP)时区,然后确保php.ini文件中的date.timezone
设置与此匹配。如果这些都没有帮助,那么它可能是区域设置。
date
字段在内部使用Locale
和IntlDateFormatter
个实例,以确保格式化日期和时间并正确读取。 PHP使用ICU来实现此目的。有几点可以让像这样的问题让人知道:
除此之外的任何事情都是猜测。我遇到了一个类似的问题,你描述了从UTC到欧洲/伦敦的时区切换,它们根据DST同步。我非常怀疑它的现场情况,但如果你确定你无论如何都没有操纵日期,那么检查就不会受到伤害。