【问题标题】:Twig date difference树枝日期差异
【发布时间】:2013-03-27 11:25:52
【问题描述】:

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

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

【问题讨论】:

    标签: datetime twig datediff


    【解决方案1】:

    从 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 对象,结果在 endDatebeginDate 之间存在差异 树枝

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

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

    注意:如果变量已经是 DateTime 对象,则无需使用 date 函数包装 endDatestartDate

    注意2:DateTime 在这里用作DateTimeInterface 的同义词。

    【讨论】:

    • 这确实像梦一样工作,但是如果日期之间的差异超过一个月,请使用 .days 而不是 .d,.d 仅返回天数部分,即如果差异是 1 个月,1 天,.d 为 1,但 .days 为 32(假设一个月为 31 天)。 {% set leftDays = difference.days %}
    • 获取生日{{ date().diff(date(item.birth)).y }}
    • 但是开始日期和结束日期的任一位置都会产生一天。你如何确定它是剩下一天(+1)还是超过一天(-1)???
    • 很棒的家伙。你是树枝大师
    【解决方案2】:

    没有内置函数可以做到这一点,但你可以自己轻松做到,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 扩展(记录在同一个链接上)。这仍然很容易。

    【讨论】:

      【解决方案3】:

      另请注意,Sensio Labs 现有的Date extension 提供 time_diff 过滤器。

      那你就可以这样使用了:{{ entity.ending_date|time_diff(entity.starting_date) }}

      请注意,此插件已被放弃,Twig 3 不支持:https://packagist.org/packages/twig/extensions

      【讨论】:

        【解决方案4】:

        对于 Symfony 5,我建议使用 KnpTimeBundle

        它提供了twig函数|ago

        要安装:composer require knplabs/knp-time-bundle

        【讨论】:

          猜你喜欢
          • 2011-09-18
          • 2015-06-26
          • 1970-01-01
          • 1970-01-01
          • 2021-10-26
          • 2022-01-19
          • 2012-12-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多