Symfony2日期时间表

时间:2015-09-18 10:00:56

标签: php symfony datetime

在表单中使用我的日期时间字段有点奇怪。 我刚刚将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',

形式解决了我的问题。

1 个答案:

答案 0 :(得分:1)

这听起来很像时区或语言环境问题。

可以使用表单字段中的two options model_timezoneview_timezone来检查前者,例如

$customerReportForm->add('dateTo', 'date', [
    // ...
    'model_timezone' => 'UTC',
    'view_timezone' => 'UTC',
]);

尝试以UTC的方式设置时区,看看是否仍然遇到同样的问题。接下来,尝试查看您的系统(而不是PHP)时区,然后确保php.ini文件中的date.timezone设置与此匹配。如果这些都没有帮助,那么它可能是区域设置。

date字段在内部使用LocaleIntlDateFormatter个实例,以确保格式化日期和时间并正确读取。 PHP使用ICU来实现此目的。有几点可以让像这样的问题让人知道:

  1. 您的系统/ php.ini / Symfony配置区域设置以奇怪的方式不同
  2. 如果你的PHP版本是针对一个奇怪或错误的ICU版本编译的
  3. 系统中存储的区域设置可能不是最新的或可能是最新的,可能是错误的
  4. 除此之外的任何事情都是猜测。我遇到了一个类似的问题,你描述了从UTC到欧洲/伦敦的时区切换,它们根据DST同步。我非常怀疑它的现场情况,但如果你确定你无论如何都没有操纵日期,那么检查就不会受到伤害。