我在数据库中存储了两个dateTime对象:
当我尝试使用ViewHelper format.date
输出它们时<f:format.date format="H:i">{termin.datumBeginn}</f:format.date>
我得到以下结果:
所以我有一个小时的班次和一个两个小时的班次,我无法写一个解决方法。如何正确设置时区以获得干净的输出?
答案 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