PHP-为什么日期之间的差异显示在错误的日期?

PHP-为什么日期之间的差异显示在错误的日期?,php,datediff,Php,Datediff,我仍在学习PHP,并试图改进PHP编程。所以,我正在测试一个简单的代码,显示两个日期之间的持续时间。我用不同的开始日期和结束日期对它进行测试,直到这一个得到了错误的持续时间 代码: 正确的持续时间应为0年2个月22天。但它显示了错误的持续时间,即0年2个月20天 有人能解释一下为什么会这样吗?我想知道它变成这样的原因是什么。在这里更正代码: $d1 = new DateTime('2017-02-20'); // 20 Feb 2017 $d2 = new DateTime('2017-05

我仍在学习PHP,并试图改进PHP编程。所以,我正在测试一个简单的代码,显示两个日期之间的持续时间。我用不同的开始日期和结束日期对它进行测试,直到这一个得到了错误的持续时间

代码:


正确的持续时间应为0年2个月22天。但它显示了错误的持续时间,即0年2个月20天

有人能解释一下为什么会这样吗?我想知道它变成这样的原因是什么。

在这里更正代码:

$d1 = new DateTime('2017-02-20'); // 20 Feb 2017
$d2 = new DateTime('2017-05-12'); // 12 May 2017

$diff = $d1->diff($d2); //excluding end date

echo $diff->y ." years "; 
echo $diff->m ." months ";
echo $diff->d ." days";

始终从较大日期扣除较短日期。

您应该区分$d1和$d2

$d1 = new DateTime('2017-02-20');
$d2 = new DateTime('2017-05-12');
$diff = $d1->diff($d2); // differentiate $d1 (datetime1) to $d2 (datetime2)

echo $diff->y ." years "; 
echo $diff->m ." months ";
echo $diff->d ." days";

你也可以尝试程序化的方法

$d1 = date_create('2017-02-20');
$d2 = date_create('2017-05-12');
$diff = date_diff($d1, $d2); // differentiate $d1 (datetime1) to $d2 

echo $diff->y ." years "; 
echo $diff->m ." months ";
echo $diff->d ." days";

可能重复2月份的28天。3月1日前8天+12天+2个月。。。对我来说似乎是正确的
$d1 = date_create('2017-02-20');
$d2 = date_create('2017-05-12');
$diff = date_diff($d1, $d2); // differentiate $d1 (datetime1) to $d2 

echo $diff->y ." years "; 
echo $diff->m ." months ";
echo $diff->d ." days";