2014-10-11 18 views
7

Tôi mới đến cành lá và tôi đang tìm cách để biến một định dạng datetime thành một thời gian trước đây như 2 giờ trước hoặc 3 days ago. Có một plugin jquery (jquery-timeago) mà tôi đã sử dụng ở phía khách hàng nhưng nó sẽ là tuyệt vời nếu tôi có thể làm điều này với cành. Nếu cành cây không đi kèm với định dạng bộ lọc này thì có những phần mở rộng mà tôi có thể sử dụng không?Twig - thời gian trước đây định dạng

Trả lời

12

Tôi phát hiện ra mình có thể tạo bộ lọc tùy chỉnh với cành hình 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'; 
    } 

}); 

Sau đó, tôi thêm nó vào môi trường Twig tôi:

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

Sử dụng nó mẫu của tôi như thế này:

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

Tôi biết đó là một khoảng thời gian kể từ khi bạn đăng nó, nhưng có một cách để thêm bản dịch để giải pháp của bạn? Tôi đã có thể tiêm một đối tượng Translator trong dịch vụ, nhưng Symfony không nhận ra "bản dịch-id". – wawa

3

Nếu bạn đang sử dụng cành bên trong Symfony, hãy kiểm tra KnpTimeBundle . Bao gồm hỗ trợ "trước" bằng nhiều ngôn ngữ.

+0

Cảm ơn tôi sẽ giữ điều này trong tâm trí, nhưng ngay bây giờ tôi sẽ cho Slim về dự án nhỏ này. –

12

mở rộng ngày cành hiện chính xác những gì bạn hỏi:

{{ post.published_at|time_diff }} 

Ví dụ trên sẽ ra một chuỗi như 4 giây hoặc trong 1 tháng, tùy thuộc vào ngày lọc.

Xem http://twig.sensiolabs.org/doc/extensions/date.html (không còn hoạt động)

Làm việc liên kết http://twig-extensions.readthedocs.io/en/latest/date.html

+1

Thật không may là bộ lọc cung cấp cho undefined (hoặc null?) Nếu sự khác biệt là 0 giây. Vì vậy, bạn phải sử dụng '{{post.published_at | time_diff? : 'just now'}} '. Tôi khuyên bạn nên viết một bộ lọc tùy chỉnh như đề xuất ở trên. – Travis

+0

Liên kết đó không hoạt động. Tính năng này đã bị xóa khỏi cành chưa? Có cách nào để làm điều đó ngay bây giờ không? – Bryce

+0

Tôi đã thêm liên kết hoạt động – 10us

Các vấn đề liên quan