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

时间:2017-04-04 04:28:31

标签: php datediff

我还在学习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天

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

2 个答案:

答案 0 :(得分:0)

在此更正代码:

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

始终从更长的日期到更短的日期扣除。

答案 1 :(得分:0)

您应该将$ 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";