如何在控制器上使用 Twig 过滤器 "time_diff"?

How to use Twig filter "time_diff" on the Controller?

我正在使用 Symfony 3.0 版本开发一个项目,我添加了一个位置,用户可以在其中查看该项目是在多少年前添加的。为了能够使用它,我将日期扩展添加到 services.yml 文件中,如下所示:

twig.extension.date:
       class: Twig_Extensions_Extension_Date
       tags:
            - { name: twig.extension }

现在我可以使用以下代码:{{ answer.answeredAt|time_diff }} 一切正常,因为它显示了例如“2 小时前”。

我的问题是,其中一些 "answers" 可以通过 javascript 调用添加。我搜索了一下,最好的选择是在控制器中将这个 twig 位渲染为字符串,然后在 javascript 响应中将其发回。这样:

$now = new \DateTime();
$template = $this->get('twig')->createTemplate('{{ answeredAt|time_diff }}');
$date = $template->render(['answeredAt' => $now]);

$response = new JsonResponse([
    'answer' => [
        'id' => $answer->getId(),
        'text' => $answer->getText(),
        'date' => $date
    ]
]);

我认为这应该可以正常工作,但事实并非如此。虽然没有发现错误,但返回时日期字段总是空的。我是否需要在 services.yml 上做一些特殊的事情才能使扩展在控制器上可用?

问题与日期不存在差异时有关,换句话说,当两个日期相同时,函数将 return 空白,这误导我以为出了什么问题.

如果你检查我的代码,我正在寻找现在和 new \DateTime() 之间的区别,这也是现在,所以,根本没有区别。

如果你还想向用户展示一些东西,就像我的情况一样,你可以使用下面的代码:

$date = $template->render(['answeredAt' => $now->modify('-1 second')]);

这将向用户显示:“1 秒前”。