我有以下代码返回一个意外的答案。请让我知道什么是错的。
$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
这将给你一天一个月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-31
添加1个月时,PHP将在内部将月值03
增加到04
。结果是2019-04-31
。
由于四月只有30天,2019-04-31
与2019-05-01
具有相同的含义。这就是为什么你得到一个月零天的原因。
DateInterval
类有另一个方便的属性:days
而不是m
和d
。它将包含两个日期之间的总天数,等于31(你需要在2019-03-31
上添加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";