DateTime :: diff返回意外结果

时间:2019-03-01 13:47:38

标签: php datetime datediff

我有以下代码返回了意外的答案。请让我知道怎么了。

$start_date  = new DateTime('31-03-2019');
$end_date    = new DateTime('01-05-2019');
$d = $start_date->diff($end_date);
echo "day: " . $d->d . " month: " . $d->m . "\n";

它返回以下输出:

day: 0 month: 1

我希望输出为:

day: 1 month: 1

2 个答案:

答案 0 :(得分:0)

这将给您一天零一个月https://3v4l.org/q0T8r

$start_date  = new DateTime('31-03-2019 00:00:00');
$end_date    = new DateTime('01-05-2019 24:00:00');
$d = $start_date->diff($end_date);
echo "day: " . $d->d . " month: " . $d->m . "\n";

答案 1 :(得分:0)

当您向*添加1个月时,PHP会在内部将月份值/增加到2019-03-31。结果为03

由于四月只有30天,所以04的含义与2019-04-31相同。这就是为什么要得到一个月零零天的结果的原因。


DateInterval类具有另一个方便的属性:2019-04-31而不是2019-05-01days。它将包含两个日期之间的总天数,等于31(您必须向m添加31天才能到达d

使用此值,您可以实现自己的逻辑,即“一个月”是什么。如果您将其定义为“一个月= 30天”,则可能是您不希望的结果:

2019-03-31