我有以下代码返回了意外的答案。请让我知道怎么了。
$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
答案 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-01
和days
。它将包含两个日期之间的总天数,等于31(您必须向m
添加31天才能到达d
。
使用此值,您可以实现自己的逻辑,即“一个月”是什么。如果您将其定义为“一个月= 30天”,则可能是您不希望的结果:
2019-03-31