2014-09-28 109 views
1

我想創建自定義過濾器來計算兩個日期之間的差異。 我跟隨doc和創建過濾器來源:Symfony 2自定義過濾器

public function getFilters() 
{ 
    return array(
     new \Twig_SimpleFilter('auctionLenght', array($this, 'auctionLenght')), 
    ); 
} 

public function auctionLenght($creDate,$expDate) 
{ 
    $datetime1 = new \DateTime($creDate); 
    $datetime2 = new \DateTime($expDate); 
    $interval = $datetime1->diff($datetime2); 
    $data = date('Y-m-D', $interval); 
    return $data; 
} 

public function getName() 
{ 
    return 'eforma_extension'; 
} 

現在我想在模板中使用它:

{{entity.creDate |auctionLenght(entity.expDate)}} 

,但我得到錯誤的所有時間:

異常被(「DateTime :: __ construct()期望參數1是字符串,給定對象」)

我試圖在公共函數auctionLenght(\ DateTime $ creDate,\ DateTime $ expDate)中傳遞\ DateTime類型提示,但它不起作用。我該如何修復?過濾器註冊正確,因爲簡單的添加到字符串過濾器運行良好

回答

3

如果entity是一個學說ORM實體,那麼你可能已經有DateTime對象了,你可以刪除兩條實例化它們的行,這應該可以解決你的問題。

1

您應該閱讀doc,特別是this之一。 public DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]])接收一個字符串(默認爲string $time = "now")arguemtn不是一個對象..

您可以格式化你的creDateexprDate對象爲字符串過濾功能,並將它們傳遞到日期時間: 例如:

public function auctionLenght($creDate,$expDate) 
{ 
    $creString = $creDate->format('Y-m-d H:i:s'); 
    $expString = $expDate->format('Y-m-d H:i:s'); 

    .... 

    return $data; 
} 
+0

謝謝回答。那麼我把我的數據從實體。 entity.creDate是Doctrine DateTime對象。這有些改變嗎?我嘗試你的解決方案並重播。 – user2217288 2014-09-29 06:00:26

+0

它的一個簡單的行如果數據被拉爲主義的數據。返回$ creDate-> diff($ expDate) - > format('%a days');感謝您的幫助 – user2217288 2014-09-29 17:39:28

+0

@ user2217288 _ShonM_已經回答了您的問題,Doctrine寫作日期時間對象,並將其作爲日期時間對象讀取,如果您將其類型設置爲日期時間,那就是爲什麼您不需要格式化,將它們傳遞給DateTime對象,就可以使用它們直接.. +1給他從我的回答.. – xurshid29 2014-09-29 17:56:36