2013-03-27 2 views

답변

12

내장 기능이 없지만 쉽게 할 수 있습니다. extending twig은 쉽습니다!

quick'n'easy 방법은 나뭇 가지의 간단한 함수 클래스와 함께 할 것입니다 :

$function = new Twig_SimpleFunction('date_difference', function ($start, $end) { 
    // ... calculate difference and return it 
}); 

// assuming $twig is an instance of Twig_Environment 
$twig->addFunction($function); 

재사용 방법은 (동일한 링크에 문서화) 나뭇 가지 확장을 만드는 것입니다. 여전히 쉽습니다.

50

PHP 5.3 이후 확장 기능을 작성하지 않고 다른 옵션이 있습니다.

이 예

는 복수 일/일

CALC하는 방법을 보여
{# endDate and startDate are strings or DateTime objects #} 
{% set difference = date(endDate).diff(date(startDate)) %} 
{% set leftDays = difference.days %} 
{% if leftDays == 1 %} 
    1 day 
{% else %} 
    {{ leftDays }} days 
{% endif %} 

설명 :

PHP 5.3 DateTime 객체가 endDatebeginDate 나뭇 가지 사이의 결과 차이가있는 DateInterval 개체를 반환 diff() 방법이있다

나뭇 가지 date 항상 함수는을 반환합니다.객체이므로 diff 메서드를 호출 할 수 있습니다.

마지막으로 DateInterval 객체의 속성에 액세스하거나 Twig date 필터로 형식을 지정할 수 있습니다.

참고 : 변수가 이미 DateTime 객체 인 경우 date 기능 랩 endDate 또는 startDate의 필요가 없습니다.

주 2 : 여기 DateTime은 동의어로 DateTimeInterface으로 사용됩니다.

+3

이이 날짜 사이의 차이가 한 달 이상 될 것입니다 그러나 경우에, 꿈처럼 작동 않는 대신 .D의 사용 .days 만 .D 차이가 1 개월, 1 일이면 .d는 1이되지만 .days는 32 일 (31 일 월이라고 가정) 일 수 있습니다. '{% set leftDays = difference.days %}' –

+0

생년월일 {{date(). diff (date (item.birth))}.}} – dikirill

+0

시작 날짜와 종료 날짜가 모두 표시됩니다. 하루에. 하루가 남았는지 (+1), 또는 하루 (-1) 남았는지 어떻게 결정합니까 ??? – Pathros

2

또한 sensio Labs의 Date extension에는 time_diff 필터가 있습니다.

그런 다음 다음과 같이 사용할 수 있습니다 : {{ entity.ending_date|time_diff(entity.starting_date) }}

관련 문제