我是Twig的新手,我希望将datetime
格式转换为 time ago ,例如 2小时前或 3几天前。有一个jquery插件(jquery-timeago),我一直在客户端使用,但如果我可以用树枝做这个将是很好的。如果twig没有附带这种过滤器格式,我可以使用扩展吗?
答案 0 :(得分:17)
Twig的日期延长完全符合您的要求:
{{ post.published_at|time_diff }}
上面的示例将输出一个字符串,如 4秒前或 1个月,具体取决于过滤日期。
请参阅http://twig.sensiolabs.org/doc/extensions/date.html(不再有效)工作链接http://twig-extensions.readthedocs.io/en/latest/date.html
要使其工作,请按以下步骤操作:
composer require twig/extensions
使用symfony时,请将此添加到services.yml
services:
twig.extension.date:
class: Twig_Extensions_Extension_Date
tags:
- { name: twig.extension }
答案 1 :(得分:12)
我发现我可以使用twig Twig_SimpleFilter
创建自定义过滤器。
$filter = new Twig_SimpleFilter('timeago', function ($datetime) {
$time = time() - strtotime($datetime);
$units = array (
31536000 => 'year',
2592000 => 'month',
604800 => 'week',
86400 => 'day',
3600 => 'hour',
60 => 'minute',
1 => 'second'
);
foreach ($units as $unit => $val) {
if ($time < $unit) continue;
$numberOfUnits = floor($time / $unit);
return ($val == 'second')? 'a few seconds ago' :
(($numberOfUnits>1) ? $numberOfUnits : 'a')
.' '.$val.(($numberOfUnits>1) ? 's' : '').' ago';
}
});
然后我将它添加到我的Twig环境中:
$twig = $app->view()->getEnvironment();//because I'm using Twig in Slim framework
$twig->addFilter($filter);
使用我的模板:
{{2014-10-11 12:54:37|timeago}}
答案 2 :(得分:5)
如果您在Symfony中使用Twig,请查看KnpTimeBundle。包括多种语言的“以前”支持。