2014-09-28 111 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