我在数据库中存储了两个日期时间对象:
- 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
我在数据库中存储了两个日期时间对象:
当我尝试使用ViewHelper format.date输出它们时
<f:format.date format="H:i">{termin.datumBeginn}</f:format.date>
尽管这已经很老了,但我想强调一下直到最近这仍然是Extbase的一个错误。我们在TYPO3 7.6和8中修复了它。日期现在被正确地读取为UTC,并转换为您服务器的时区。
确保您数据库中的所有日期都处于同一时区,因为该信息未保存在其中。当您从外部 API 调用中接收某些对象时,它们将具有日期字符串中的时区,并且通常为 UTC。从您的内部调用中,所有 \DateTime 对象将默认使用您服务器的默认时区。因此,在将其保存到数据库之前,请设置时区:
$receivedDate = new \DateTime($date);
$reveivedDate->setTimezone(new \DateTimeZone(date_default_timezone_get()));
将服务器默认时区设为时区很方便,因为无需进行其他更改。但我认为最好将其保存在“UTC”中。在这种情况下,在显示之前需要将其转换回您的服务器/用户时区。可以在ViewHelper中完成此操作(不是Typo3.Fluid中的默认ViewHelper,但是您可以轻松地在包中扩展它-克隆并再次设置时区)。也许现在可以在Flow中使用Doctrine扩展,并将带有日期的时区保存到数据库中。我尝试过一年前,但无法实现。
/**
* Returns the startDate
*
* @return \DateTime|NULL $startDate
*/
public function getStartDate() {
$date = $this->startDate;
if($date) {
$date->setTimezone(new \DateTimeZone('UTC'));
}
return $date;
}
请确保在php.ini文件中设置了PHP的时区
Example: date.timezone = "Asia/Phnom_Penh"
有关 PHP 时区的更多信息,请参考此链接:http://php.net/manual/zh/timezones.america.php