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

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

问题描述:

我还在学习PHP并试图改进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天

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

+0

的可能的复制[PHP日期\ _diff功能坏了?](http://stackoverflow.com/questions/42332227/php-date-diff-function-broken) –

+5

28天在二月。 8天至3月1日+12天+ 2个月...似乎对我 – Trent

+0

[如何计算使用PHP的两个日期之间的差异?](http://stackoverflow.com/q/676824/1255289) – miken32

更正此代码:

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