如何在PHP中获得两个日期之间的月差
我想用PHP计算一个月内两个日期之间的差值,但似乎有个bug如何在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
$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)
可以帮助您了解该类的工作方式。可能重复