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

PHP - why is the difference between dates displayed the wrong days?

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

代码:

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

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

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

正确的持续时间应该是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";

http://php.net/manual/en/datetime.diff.php

你也可以试试程序化的方式

$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";