Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中获得两个日期之间的月差_Php_Datetime_Dateinterval - Fatal编程技术网

如何在PHP中获得两个日期之间的月差

如何在PHP中获得两个日期之间的月差,php,datetime,dateinterval,Php,Datetime,Dateinterval,我想用PHP计算一个月内两个日期之间的差值,但似乎有个bug $datetime1 = new DateTime(date('Y-m-d')); $datetime2 = new DateTime(MyObject->getDate()); echo($datetime1->format('d/m/Y')); echo($datetime2->format('d/m/Y)); 结果: 29/01/2016 27/01/2015 $dateInterval = $dateti

我想用PHP计算一个月内两个日期之间的差值,但似乎有个bug

$datetime1 = new DateTime(date('Y-m-d'));
$datetime2 = new DateTime(MyObject->getDate());
echo($datetime1->format('d/m/Y'));
echo($datetime2->format('d/m/Y));
结果:

29/01/2016
27/01/2015

$dateInterval = $datetime1->diff($datetime2);
echo($dateInterval->format(%m months);
0 months
结果:

29/01/2016
27/01/2015

$dateInterval = $datetime1->diff($datetime2);
echo($dateInterval->format(%m months);
0 months
为什么呢?我做错了什么

// @link http://www.php.net/manual/en/class.datetime.php
$d1 = new DateTime(date('Y-m-d'));
$d2 = new DateTime(MyObject->getDate());

// @link http://www.php.net/manual/en/class.dateinterval.php
$interval = $d2->diff($d1);

$interval->format('%m months');
计算两个日期之间的月份:

对于PHP>=5.3,可以使用DateTime diff返回 DateInterval对象,如下所示

$d1 = new DateTime("2013-12-09");
$d2 = new DateTime("2014-03-17");

var_dump($d1->diff($d2)->m); 
var_dump($d1->diff($d2)->m + ($d1->diff($d2)->y*12));
如果没有PHP5.3或更高版本,可以使用
strotime()
函数获取时间戳,即任何日期和 1970年1月1日00:00:00

$d1 = "2013-12-09";
$d2 = "2014-03-17";
echo (int)abs((strtotime($d1) - strtotime($d2))/(60*60*24*30));

DateTime::diff
返回相对值,但
天除外
。 因此,要计算月份的绝对差值,必须使用:

$datetime1->diff($datetime2)->format('%y')*12+$datetime1->diff($datetime2)->format('%m');

您刚刚错过了单报价终止

$datetime1 = new DateTime(date('Y-m-d'));
$datetime2 = new DateTime(MyObject->getDate());
echo($datetime1->format('d/m/Y'));
echo($datetime2->format('d/m/Y'));//You are missing single quote here
我也在尝试这个代码

<?php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-12-13');
echo($datetime1->format('d/m/Y'));
echo "<br/>";
echo($datetime2->format('d/m/Y'));
$dateInterval = $datetime1->diff($datetime2);
//print_r(arrayColumn($dateInterval,'m'));
echo "<br>Month are :".$dateInterval->format('%m');
exit; 

?>


在您描述的情况下,月份之间没有差异(都是一月),您会发现日期间隔显示year属性包含1,因为日期之间有一年的差异。确定。。我认为这是两个月内日期之间的差异
print\r($dateInterval)
可以帮助您了解该类的工作方式。可能重复