2014-10-11 29 views
7

Jestem nowy Gałązka i szukam, aby włączyć formatowanie datetime do czas temu jak 2 godziny temu lub 3 dni temu. Istnieje wtyczka jquery-timeago, której używam po stronie klienta, ale byłoby wspaniale, gdybym mógł to zrobić z gałązką. Jeśli gałązka nie jest dostarczana z tym formatem filtra, czy istnieją rozszerzenia, z których mogę korzystać?Gałązka - czas temu Format

Odpowiedz

12

Dowiedziałem się, że mogę utworzyć niestandardowy filtr z gałązką 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'; 
    } 

}); 

Potem dodać go do mojego środowiska Twig:

$twig = $app->view()->getEnvironment();//because I'm using Twig in Slim framework 
$twig->addFilter($filter); 

Użyj go mój szablon tak:

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

Wiem, że to trochę czasu od kiedy to pisał, ale czy jest jakiś sposób, aby dodać tłumaczenia do rozwiązania? Udało mi się wprowadzić obiekt Translator do usługi, ale Symfony nie rozpoznaje "translation-ids". – wawa

3

Jeśli używasz Twig wewnątrz Symfony, sprawdź KnpTimeBundle . Obejmuje obsługę "temu" w wielu językach.

+0

Dzięki temu będę o tym pamiętać, ale teraz idę na Slim w tym małym projekcie. –

12

gałązka data przedłużenia robi dokładnie to, o co prosisz:

{{ post.published_at|time_diff }} 

Powyższy przykład pokaże na wyjściu ciąg jak 4 sekundy temu lub w 1 miesiąc, w zależności od daty filtrowanej.

Zobacz http://twig.sensiolabs.org/doc/extensions/date.html (już nie działa)

Praca Link http://twig-extensions.readthedocs.io/en/latest/date.html

+1

Niestety ten filtr daje niezdefiniowane (lub zerowe?), Jeśli różnica wynosi 0 sekund. Więc musisz użyć '{{post.published_at | time_diff? : "właśnie teraz"}} '. Polecam napisanie niestandardowego filtru, jak sugerowano powyżej. – Travis

+0

Ten link nie działa. Czy ta funkcja została usunięta z gałązki? Czy jest jakiś sposób, aby to zrobić teraz? – Bryce

+0

Dodałem działający link – 10us

Powiązane problemy