2014-10-11 39 views
7

我是新來的樹枝,我期待把一個datetime格式轉換成很久以前3小時前4天前。有一個jquery插件(jquery-timeago),我一直在客戶端使用,但如果我可以用樹枝做到這一點,那將是非常棒的。如果樹枝沒有附帶這種過濾器格式,我可以使用哪些擴展名?嫩枝 - 前段時間格式

回答

12

我發現我可以用樹枝創建一個自定義過濾器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 = $app->view()->getEnvironment();//because I'm using Twig in Slim framework 
$twig->addFilter($filter); 

使用它我的模板是這樣的:如果你使用的嫩枝Symfony的內部

{{2014-10-11 12:54:37|timeago}} 
+0

我知道這是一個一段時間,因爲你的貼吧,但有沒有辦法翻譯添加到您的解決方案?我能夠在服務中注入Translator對象,但Symfony不識別「翻譯id」。 – wawa 2017-06-29 15:33:02

3

,退房KnpTimeBundle 。包含多種語言的「以前」支持。

+0

謝謝我會牢記這一點,但現在我正在爲這個小型項目的苗條。 – 2014-10-12 03:19:59

12

枝條的日期延長不正是你問:

{{ post.published_at|time_diff }} 

上面會輸出的例子一個字符串像4秒前1個月,取決於過濾日期。

http://twig.sensiolabs.org/doc/extensions/date.html(不再工作)

工作環節http://twig-extensions.readthedocs.io/en/latest/date.html

+1

不幸的是,如果差異爲0秒,過濾器會給出未定義(或空?)。所以,你必須使用'{{post.published_at | time_diff? :'剛纔'}}'。我建議按照上面的建議編寫自定義過濾器。 – Travis 2016-09-22 19:53:00

+0

該鏈接不起作用。此功能是否已從樹枝上移除?現在有辦法做到嗎? – Bryce 2017-06-09 16:54:08

+0

我已添加工作鏈接 – 10us 2017-06-13 08:29:59