在树枝中使用datediff来确定日期是在给定日期之前还是之后

时间:2018-02-09 12:07:03

标签: symfony date twig

我需要能够计算发票到期日与当前日期之间的差异,因此我可以在Symfony的Twig文件中标记有关付款紧急程度的相应警告消息。

我实施了这里给出的解决方案:

https://stackoverflow.com/a/27205095/5194337

虽然它有效,但它无法判断它是在截止日期之前还是之后,它只计算天数的差异。因此,如果发票是逾期两天,它会返回2,如果它在两天内到期,它也会返回,但这并不是真的有用。

这是我的代码:

{% if invoice['invoice'].datePaid != null %}
    {{ invoice['invoice'].datePaid|date('d/m/Y') }}
{% else %}
    {% set difference = date(invoice['invoice'].dateDue).diff(date('now')) %}
    {% set leftDays = difference.days %}
    {% if date(invoice.['invoice'].dateDue) < date|('now') %}
        <span class="overdue">Overdue</span>
    {% elseif leftDays < 3 and leftDays > 0 %}
        <span class="unpaid">Due in {{ leftDays }} day(s)</span>
    {% else %}
        <span class="unpaid">Unpaid</span>
    {% endif %}
{% endif %}

正如您所看到的,我使用{% if date(invoice.['invoice'].dateDue) < date|('now') %}尝试查看截止日期是否已过去,但我收到以下错误:

  

预期的姓名或号码。

但是我会尝试格式化日期。如何准确地使用此计算,因为我不确定错误甚至意味着什么?

2 个答案:

答案 0 :(得分:1)

您遇到语法错误。这样:

invoice['invoice'].datePaid
{# or #}
invoice.invoice.datePaid

有一个额外的点。它应该是:

myArray.someKey

错误意味着因为您可以使用点表示法访问数组/对象值,Twig期望句点后跟名称(数组键;例如myArray.2)或数字(数组索引;例如{ {1}})。但是现在你使用点符号时,[不是有效字符。

(此外,您的Twig代码非常复杂,例如在您的控制器中可能会做得更好,例如@LBA已经建议过。)

答案 1 :(得分:0)

如果没有提供参数,

Twig date function将返回当前日期,因此您可以使用:

{% if date(invoice['invoice'].dateDue) < date() %}

管道运算符用于display and format a date

{{ "now"|date("m/d/Y") }}