我想创建自定义过滤器来计算两个日期之间的差异。 我按照doc创建过滤源:
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 type-hint但它无效。我该怎么修呢?过滤器已正确注册,因为简单的添加到字符串过滤器运行良好。
答案 0 :(得分:3)
如果entity
是一个Doctrine ORM实体,那么你可能已经有了DateTime
个对象,你可以删除实例化它们的两行,这可以解决你的问题。
答案 1 :(得分:1)
您应该阅读doc,尤其是this。 public DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
收到一个字符串(默认为string $time = "now"
)arguemtn而不是对象..
您可以将creDate
和exprDate
对象格式化为过滤器函数中的字符串,并将它们传递给datetime:
例如:
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;
}