如何获得 PHP 中两个日期之间的月数差
How to get the difference in months between two dates in PHP
我想用 PHP 计算一个月中两个日期之间的差异,但似乎某处存在错误。
$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
这是为什么?我做错了什么?
// @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');
Calculate months between two dates:
For PHP >=5.3 you can use DateTime diff that returns a
DateInterval object as below.
$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));
If you don’t have PHP 5.3 or higher, you can use strtotime()
function to get timestamps, the number of seconds between any date and
January 1 1970 00:00:00.
$d1 = "2013-12-09";
$d2 = "2014-03-17";
echo (int)abs((strtotime($d1) - strtotime($d2))/(60*60*24*30));
http://www.tricksofit.com/2013/12/calculate-the-difference-between-two-dates-in-php
DateTime::diff
returns 相对值,days
除外。
因此,要计算月数的绝对差异,您必须使用:
$datetime1->diff($datetime2)->format('%y')*12+$datetime1->diff($datetime2)->format('%m');
$currentDateTime = new DateTime;
$dateTimeInTheFuture = new DateTime(MyObject->getDate());
$dateInterval = $dateTimeInTheFuture->diff($currentDateTime);
$totalMonths = 12 * $dateInterval->y + $dateInterval->m;
echo $totalMonths;
你只是错过了单引号终止,
$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;
?>
我想用 PHP 计算一个月中两个日期之间的差异,但似乎某处存在错误。
$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
这是为什么?我做错了什么?
// @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');
Calculate months between two dates:
For PHP >=5.3 you can use DateTime diff that returns a DateInterval object as below.
$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));
If you don’t have PHP 5.3 or higher, you can use
strtotime()
function to get timestamps, the number of seconds between any date and January 1 1970 00:00:00.$d1 = "2013-12-09"; $d2 = "2014-03-17"; echo (int)abs((strtotime($d1) - strtotime($d2))/(60*60*24*30));
http://www.tricksofit.com/2013/12/calculate-the-difference-between-two-dates-in-php
DateTime::diff
returns 相对值,days
除外。
因此,要计算月数的绝对差异,您必须使用:
$datetime1->diff($datetime2)->format('%y')*12+$datetime1->diff($datetime2)->format('%m');
$currentDateTime = new DateTime;
$dateTimeInTheFuture = new DateTime(MyObject->getDate());
$dateInterval = $dateTimeInTheFuture->diff($currentDateTime);
$totalMonths = 12 * $dateInterval->y + $dateInterval->m;
echo $totalMonths;
你只是错过了单引号终止,
$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;
?>