提问者:小点点

如何在控制器上使用细枝过滤器“时间差”?


我正在使用Symfony 3.0版本进行一个项目,我添加了一个地方,用户可以在这里看到该项添加的时间。为了能够使用它,我在服务中添加了日期扩展。yml文件如下所示:

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

现在我可以使用下面的代码:{{answere.answeredAt | time_diff}}并且一切都是正确的,因为它显示了例如“2小时前”。

我的问题是,一些“答案”可以通过javascript调用添加。我搜索了一下,最好的选择是在控制器中将这个细枝位呈现为字符串,并在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
    ]
]);

我认为这应该可以很好地工作,但事实并非如此。虽然没有出现错误,但日期字段总是返回为空。我需要做一些特别的服务吗。yml是否在控制器上提供扩展?


共1个答案

匿名用户

问题在于何时不存在日期差异,换言之,当两个日期相同时,函数将返回空白,这误导了我,使我认为有问题。

如果您检查我的代码,我会查找now和new\DateTime()之间的差异,后者也是now,因此,没有任何差异。

如果您仍然希望向用户显示某些内容,就像我的案例一样,可以使用以下代码:

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

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