代码之家  ›  专栏  ›  技术社区  ›  rafaelmorais

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

  •  1
  • rafaelmorais  · 技术社区  · 6 年前

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

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

    现在我可以使用以下代码: {{ answer.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
        ]
    ]);
    

    我认为这应该很好,但它没有。虽然没有出现错误,但日期字段始终返回为空。我是否需要在services.yml上执行一些特殊操作,以便在控制器上提供扩展?

    1 回复  |  直到 6 年前
        1
  •  1
  •   rafaelmorais    6 年前

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

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

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

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

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