我有一个具有开始日期和结束日期的实体。
使用twig能否获得它们之间的时间差异?
自 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 %}
说明:
PHP 5.3 DateTime
对象有一个 diff()
方法,它返回一个 DateInterval
对象,表示 endDate
和 beginDate
之间的时间差。
Twig date
函数始终返回一个 DateTime
对象,因此我们可以调用 diff
方法。
最后,我们可以访问 DateInterval
对象的属性或使用 Twig 的 date
过滤器格式化它。
注意:如果变量已经是 DateTime
对象,则不需要使用 date
函数包装 endDate
或 startDate
。
注意2:这里将 DateTime
用作 DateTimeInterface
的同义词。
没有内置的函数可以做到这一点,但您可以轻松地自己实现。 扩展twig 很容易!
快捷简单的方法是使用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);
可重复使用的方法是创建一个Twig扩展(在同一个链接中有文档记录)。这仍然很容易。
{{ entity.ending_date|time_diff(entity.starting_date) }}
。
{% 设leftDays = difference.days %}
- Steve Childs