我需要能够计算发票到期日与当前日期之间的差异,因此我可以在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') %}
尝试查看截止日期是否已过去,但我收到以下错误:
预期的姓名或号码。
但是我会尝试格式化日期。如何准确地使用此计算,因为我不确定错误甚至意味着什么?
答案 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") }}