树枝日期差异

Ste*_*ing 24 datetime datediff twig

我有一个有开始日期和结束日期的实体.

是否可以通过使用树枝来获得它们之间的时间差异?

Mak*_*s3w 71

从PHP 5.3开始,还有另一种选择,无需编写扩展名.

此示例显示如何计算复数天/天

{# 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 %}
Run Code Online (Sandbox Code Playgroud)

说明:

PHP 5.3 DateTime对象具有diff()返回对象的方法,DateInterval其结果endDatebeginDate Twig 之间存在差异

Twig date函数总是返回一个DateTime对象,所以我们可以调用diff方法

最后,我们可以访问DateInterval对象的属性或使用Twig date过滤器对其进行格式化.

注意:如果变量已经是对象,则不需要换行endDatestartDate使用date函数DateTime.

注2:DateTime这里用作同义词DateTimeInterface.

  • 这确实像梦一样,但是如果日期之间的差异将超过一个月,则使用.days而不是.d,.d只返回天数部分,即如果差异是1个月,1天, .d将是1,但.days将是32(假设31个月).`{%set leftDays = difference.days%}` (4认同)
  • 但是开始日期和结束日期的任何位置都将导致一天。您如何确定还剩一天(+1)还是一天(-1)以上???? (4认同)
  • 获取生日{{ date().diff(date(item.birth)).y }} (2认同)

Mae*_*lyn 13

没有内置功能可以做到这一点,但你可以轻松地自己做,扩展树枝很容易!

快速的方法是使用twig的简单函数类:

$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);
Run Code Online (Sandbox Code Playgroud)

可重用的方法是创建一个枝条扩展(在同一链接上记录).这仍然很容易.