【问题标题】:Typo3 6.2.15 DateTime off by 1 hourTypo3 6.2.15 DateTime 关闭 1 小时
【发布时间】:2016-02-11 10:53:08
【问题描述】:

我有一个模型,其中包含一个名为“fromDate”的 DateTime 列:

/**
 * 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() 返回“Europe/Berlin”(这是正确的)。我试图改变typo3 serverTimeZone(我试过0和1,但没有改变任何东西)。

如果我用phpmyadmin查看数据库,条目是“2016-02-11 00:00:00”

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

【问题讨论】:

  • 您使用的是哪个版本的 TYPO3?
  • 如果您渲染 DateTime 并显示时区(如“Y-m-d H:i:sT”),您会看到什么?
  • 在安装工具 > 所有配置 > 切换全部找到 [SYS][serverTimeZone] 并将其设置为 1(如果不是) TYPO3 中有一些功能会尝试将日期时间存储到数据库中UTC - 以及后来 revert 该转换...这是某种形式...
  • 我确实将它设置为 1 - 没有任何改变

标签: datetime typo3 extbase


【解决方案1】:

试试类似的东西

$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() 有一个基于每个属性数据类型的“switch case”代码部分。如果类型是 DateTime,thawProperties() 调用同一类中的mapDateTime()

mapDateTime() 假定“本地日期/日期时间值以 UTC 格式存储”,因此它将“UTC”日期时间区应用于原始值。但随后,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有关。

【讨论】:

    【解决方案2】:

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

    如果不想给内核打补丁,也可以为相关部分创建一个扩展类(DataMapper)并覆盖方法(mapDateTime())。

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2015-11-15
      相关资源
      最近更新 更多