-4

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

$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
4

2 回答 2

0

当您将 1 个月添加到 时2019-03-31,PHP 将在内部将月份值03增加到04. 结果是2019-04-31

由于四月只有 30 天,2019-04-31具有相同的含义2019-05-01。这就是为什么你得到一个月零天的原因。


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

在这个值上,您可以实现自己的逻辑,即“一个月”是什么。如果您将其定义为“一个月 = 30 天”,这可能是您希望得到的结果:

$start_date  = new DateTime('31-03-2019');
$end_date    = new DateTime('01-05-2019');
$diff = $start_date->diff($end_date);

$months = floor($diff->days / 30);
$days = $diff->days % 30;

echo "day: " . $days . " month: " . $months . "\n";
于 2019-03-01T14:04:51.700 回答
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";
于 2019-03-01T13:55:16.447 回答