【发布时间】:2013-03-27 11:25:52
【问题描述】:
我有一个具有开始日期和结束日期的实体。
是否可以通过使用twig获得它们之间的时间差异?
【问题讨论】:
我有一个具有开始日期和结束日期的实体。
是否可以通过使用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 的同义词。
【讨论】:
{% set leftDays = difference.days %}
没有内置函数可以做到这一点,但你可以自己轻松做到,extending twig 很简单!
quick'n'easy 方法是使用 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 扩展(记录在同一个链接上)。这仍然很容易。
【讨论】:
另请注意,Sensio Labs 现有的Date extension 提供 time_diff 过滤器。
那你就可以这样使用了:{{ entity.ending_date|time_diff(entity.starting_date) }}
请注意,此插件已被放弃,Twig 3 不支持:https://packagist.org/packages/twig/extensions
【讨论】:
【讨论】: