我创建了一个小扩展,它使用日期时间来查看一些特定事件(事件日期和事件时间),但如果我尝试从数据库获取正确的日期时间到前端,我总是会遇到麻烦。
我可以通过 TYPO3 后端设置每个事件的日期时间:
但是如果我尝试在前端获取这个值,例如:
<f:format.date format="d.m.Y - H:i:s">{event.appointment}</f:format.date>
Run Code Online (Sandbox Code Playgroud)
那么输出不是“10.04.2016 - 08:00:00”,而是“10.04.2016 - 10:00:00”。
我怎样才能避免这种行为?我也通过安装工具设置了时区:
[SYS][phpTimeZone] = Europe/Berlin
Run Code Online (Sandbox Code Playgroud)
但我总是得到错误的日期时间。如果我尝试这样的事情:
DebugUtility::debug(new \DateTime());
Run Code Online (Sandbox Code Playgroud)
然后我得到正确的输出:
{"date":"2016-04-09 20:23:38.000000","timezone_type":3,"timezone":"Europe\/Berlin"}
Run Code Online (Sandbox Code Playgroud)
如果我查看数据库,我可以看到存储了正确的日期时间:
所以我不知道为什么我得到了错误的日期时间,有什么建议吗?
TYPO3 中的日期转换存在一些不一致,它在 TCE 和 Extbase 中的行为有所不同。Extbase 认为所有日期都以 UTC 形式存储在数据库中,因此在数据映射过程中将您的日期从 UTC 转换为理论上的本地时间(恕我直言,不应该这样做或应该通过安装工具进行配置),肮脏但有效的技巧是欺骗 TYPO3 ,只需在Install Tool>中All configurations找到该[SYS][phpTimeZone]设置并将其值设置为UTC。
这样 Extbase 就会认为您位于 UTC 区域内,并且您无需更改 php.ini 中的任何内容。
另一个解决方案是将日期作为时间戳存储在数据库中。
| 归档时间: |
|
| 查看次数: |
1065 次 |
| 最近记录: |