twig date_diff 月无法正常工作

twig date_diff month not working properly

我上个月尝试做 date_diff,但如果这个月有 31 天,他说我这个月 01 日,就会遇到问题。如果 2 个月后做,效果很好。但是每个月有 31 天的人都会给 01 结果。

为了更清楚,我举个例子:

{{ "now" | date("Y-m-d") }} {# 2015-07-31 #}
{{ "now" | date_modify("-1 month") | date("Y-m-d") }} {# 2015-07-01 #}
{{ "now" | date_modify("-2 month") | date("Y-m-d") }} {# 2015-05-31 #}
{{ "now" | date_modify("-3 month") | date("Y-m-d") }} {# 2015-05-01 #}

任何人知道为什么吗?因为如果用偶数修改月份,你会在月初而不是上个月结束。

根据答案 here 看来,当 PHP 使用字符串 '-1 month' 修改 DateTime() 对象时,如果我理解正确的话,它只会减少月份值.

因此,根据您的示例,您从今天的日期开始:2015-07-31

PHP 将其更改为 2015-06-31。然而,6月只有30天。所以它会将它递增到下一个有意义的日期,即... 2015-07-01.

我尝试用以下方式复制它:

echo (new DateTime())->sub(new DateInterval('P1M'))->format('Y-m-d');

和:

$dt = new DateTime();
$dt->modify('-1 month');
echo $dt->format('Y-m-d');

我在每种情况下都得到了完全相同的结果:

2015-07-01

所以我想这只是 PHP 的缺点之一。好乱,一天可以发生很多事情!