如何避免 TYPO3 中的日期时间问题?

How can I avoid datetime problems in TYPO3?

我创建了一个小扩展,它使用日期时间来查看一些特定事件(事件日期和事件时间),但如果我试图从数据库到前端获取正确的日期时间,我总是 运行 遇到麻烦。

我可以通过 TYPO3 后端设置每个事件的日期时间:

但如果我尝试在前端获取此值,例如:

<f:format.date format="d.m.Y - H:i:s">{event.appointment}</f:format.date>

那么输出不是“10.04.2016 - 08:00:00”而是“10.04.2016 - 10:00:00”。

我怎样才能避免这种行为?我也通过安装工具设置了时区:

[SYS][phpTimeZone] = Europe/Berlin

但我总是得到错误的日期时间。如果我尝试这样的事情:

DebugUtility::debug(new \DateTime());

然后我得到正确的输出:

{"date":"2016-04-09 20:23:38.000000","timezone_type":3,"timezone":"Europe\/Berlin"}

如果我查看数据库,我可以看到存储了正确的日期时间:

所以我不知道为什么我得到了错误的日期时间,有什么建议吗?

TYPO3 中的日期转换存在一些不一致,它在 TCE 和 Extbase 中的行为不同。 Extbase 认为所有日期都以 UTC 格式存储在数据库中,因此在数据映射过程中会将您的日期从 UTC 转换为理论上的本地时间(恕我直言,不应完成或应通过安装工具进行配置),肮脏但有效的技巧是愚弄 TYPO3 , 只需在 Install Tool > All configurations 中找到 [SYS][phpTimeZone] 设置并将其值设置为 UTC.

这样 Extbase 就会认为您在 UTC 区内,并且您不需要在 php.ini.

中更改任何内容

另一种解决方案是将日期作为时间戳存储在数据库中。