2014-10-19 55 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,並將它們存儲在數據庫中,並轉換爲您的服務器時區。