Typo3 6.2.15 DateTime关闭1小时

时间:2016-02-11 10:53:09

标签: datetime typo3 extbase

我有一个名为&#34的DateTime列的模型; fromDate":

/**
 * fromDate
 *
 * @var \DateTime
 */
protected $fromDate;

现在我需要这个日期来做一些计算,但是当我尝试输出它时,它似乎正好关闭了1个小时。

echo $model->getFromDate()->format('Y-m-d H:i:s');

这将返回2016-02-11 01:00:00而不是2016-02-11 00:00:00

我检查了我的服务器时区,date_default_timezone_get()返回"欧洲/柏林" (哪个是对的)。我试图改变typo3 serverTimeZone(我试过0和1,但没有改变任何东西)。

如果我用phpmyadmin查看数据库,则输入为" 2016-02-11 00:00:00"

我错过了什么,为什么会这样?任何提示?因为我觉得我疯了,一个巨大的计算脚本是基于$ fromDate的正确性...任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

尝试类似

的内容
$myDate = $model->getFromDate();
$myDate->setTimezone(new \DateTimeZone('UTC'));

或您在原始数据库表值中使用的任何时区,如果不是UTC。

在TYPO3 6.2中,至少在您的存储库中执行findAll()会开始一系列调用 - 到\TYPO3\CMS\Extbase\Persistence\Repository->createQuery(),然后到\TYPO3\CMS\Extbase\Persistence\Generic\QueryResult->rewind()rewind()调用initialize(),调用\TYPO3\CMS\Extbase\Persistence\Generic\Mapper->map()map()调用mapSingleRow(),然后在同一个班级中调用thawProperties()

TYPO3\CMS\Extbase\Persistence\Generic\Mapper->thawProperties()具有基于每种属性数据类型的“切换案例”代码部分。如果类型是DateTime,thawProperties()会在同一个类中调用mapDateTime()

mapDateTime()假设“本机日期/日期时间值以UTC格式存储”,因此它将“UTC”DateTimeZone应用于原始值。但是,mapDateTime()应用PHP date_default_timezone_get()函数中的DateTimeZone,并将更改的日期和时区属性值返回到thawProperties(),最终返回到您的Extbase扩展。

您可以在TYPO3 6.2 API reference for mapDateTime()its definition in DataMapper.php中找到详细信息。

我的回答与this StackOverflow answerthis TYPO3 Forum threadthis TYPO3 Forum thread有关。

答案 1 :(得分:0)

这是Extbase的DateTime处理中的问题,最近针对TYPO3 7.6和8(日期未被解释为UTC)进行了修复。我们不会正式回溯6.2的修复程序,但您当然可以自己应用它。

如果您不想修补核心,您还可以为相关部分(DataMapper)创建扩展类并覆盖方法(mapDateTime())。