如何使用TYPO3 extbase流体正确输出DateTime

时间:2014-10-19 17:10:34

标签: datetime typo3 fluid extbase

我在数据库中存储了两个dateTime对象:

  • 2014-11-03 09:00:00
  • 2014-10-21 13:45:00

当我尝试使用ViewHelper format.date

输出它们时
<f:format.date format="H:i">{termin.datumBeginn}</f:format.date>

我得到以下结果:

  • 10:00
  • 15:45

所以我有一个小时的班次和一个两个小时的班次,我无法写一个解决方法。如何正确设置时区以获得干净的输出?

4 个答案:

答案 0 :(得分:5)

虽然这已经很老了,但是我想强调这是 Extbase中的一个错误直到最近,我们在TYPO3 7.6和8中修复了它。现在日期正确读取为UTC,如它们存储在数据库中,并转换为您的服务器时区。

答案 1 :(得分:3)

确保数据库中的所有日期都在同一时区,因为该信息不会保存在那里。当您从外部API调用接收到某些对象时,它们将在日期字符串中具有时区,并且通常为UTC。从内部调用,所有\ DateTime对象将默认使用您的服务器默认时区。因此,在将时区保存到数据库之前设置时区:

$receivedDate = new \DateTime($date);
$reveivedDate->setTimezone(new \DateTimeZone(date_default_timezone_get()));

将时区设置为服务器默认设置非常方便,因为不需要进行任何更改..但最好将其保存在UTC&#39; UTC&#39;我认为。在这种情况下,您需要在显示之前将其转换回您的服务器/用户时区。它可以在ViewHelper中完成(不是来自Typo3.Fluid的默认值,但您可以在包中轻松扩展它 - 克隆并再次设置时区)。也许它现在可以在流程中使用学说扩展,并将时区与日期保存到数据库中..我在一年前试过它并且无法实现它..

答案 2 :(得分:1)

要解决此问题,您需要将$ TYPO3_CONF_VARS [&#39; SYS&#39;] [&#39; phpTimeZone&#39;]设置为&#34; UTC&#34;和$ TYPO3_CONF_VARS [&#39; SYS&#39;] [&#39; serverTimeZone&#39;]为&#34; 0&#34; (可能只有第一次设置就足够了)。您可以使用安装工具通过typo3后端执行此操作。 如果您有域模型,则可以使用解决方法:

/**
 * Returns the startDate
 *
 * @return \DateTime|NULL $startDate
 */
public function getStartDate() {
    $date = $this->startDate;
    if($date) {
        $date->setTimezone(new \DateTimeZone('UTC'));
    }
    return $date;
}

答案 3 :(得分:0)

请确保您已在PHP.ini文件中设置PHP的时区

Example: date.timezone = "Asia/Phnom_Penh"

有关PHP时区的更多信息,请参阅此链接:http://php.net/manual/en/timezones.america.php