2014-10-19 40 views
3

我得到存储在数据库中的两个datetime对象:如何正确使用TYPO3输出日期时间extbase流体

  • 2014年11 09:00:00
  • 2014年10月21日13:45: 00

当我尝试与视图助手format.date

<f:format.date format="H:i">{termin.datumBeginn}</f:format.date> 

我得到如下结果输出它们:

  • 10:00
  • 15:45

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

+0

我在这里遇到类似的问题,输出的时间不同于我放入的时间。您解决了问题还是找到了解决方法? – j4k3 2015-07-14 08:52:59

+0

我做过最肮脏的解决方法,并在当时做了一个简单的Input/Varchar字段。 – qualle 2015-07-14 12:22:31

回答

3

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

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

设置时区到服务器默认是方便的,因为不需要更多的变化..但最好将其保存在“UTC”我想。在这种情况下,您需要在显示之前将其转换回服务器/用户时区。它可以在ViewHelper中完成(不是Typo3.Fluid中的默认值,但可以在包中轻松扩展它 - 再次克隆和设置时区)。也许现在有可能在流中使用doctrine扩展名,并保存日期到数据库的时区..我尝试一年前,并不能使它..

+1

谢谢,但我如何访问存储查询?这是IRRE的默认TYPO3后端行为。 没有任何简单的解决方案吗?我不能成为第一个想在TYPO3 Backend中存储日期的人,并且希望以正常的viewHelper f:格式保存它的方式将其恢复到前端。 – qualle 2014-12-08 13:08:27

0

请确保你已经把PHP设置为时区php.ini文件

Example: date.timezone = "Asia/Phnom_Penh" 

对于PHP的时区的详细信息,请参考此链接:http://php.net/manual/en/timezones.america.php

+0

谢谢,我已经检查过了。这是柏林/欧洲 – qualle 2014-12-09 10:52:39

1

为了解决这个问题,你需要设置$ TYPO3_CONF_VARS [ 'SYS'] [ 'phpTimeZone']作为“UTC”和$ TYPO3_CONF_VARS ['SYS'] ['serverTimeZone']为“0”(可能只有第一个设置就足够了)。您可以使用安装工具通过typo3后端完成。 如果有域模型,您可以使用一种变通方法:

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

插入内容之后,这可能会很危险,因为日期不会改变。由TYPO3存储在数据库中的日期在服务器时区(由于历史原因...)。因此,如果您执行此更改,则需要手动将时间戳转换为UTC。 – 2016-09-06 09:11:11

5

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