简体   繁体   English

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

[英]How to get the difference in months between two dates in PHP

I wanted to calculate the difference between two dates in month with PHP but it seems like there is a bug somewhere. 我想用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));

Result: 结果:

29/01/2016
27/01/2015

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

Result: 结果:

0 months

Why is that? 这是为什么? What am i doing wrong ? 我究竟做错了什么 ?

Calculate months between two dates: 计算两个日期之间的月份:

For PHP >=5.3 you can use DateTime diff that returns a DateInterval object as below. 对于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)); 

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. 如果您没有PHP 5.3或更高版本 ,则可以使用strtotime()函数获取时间戳,即任何日期与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)); 

http://www.tricksofit.com/2013/12/calculate-the-difference-between-two-dates-in-php http://www.tricksofit.com/2013/12/calculate-the-difference-between-two-dates-in-php

// @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');

DateTime::diff returns relative values, with exception of days . DateTime::diff返回相对值, days除外。 So, to calculate the absolute difference in months, you have to use: 因此,要计算月份的绝对差异,您必须使用:

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

You are just missed Single quote termination, 您只是想念单引号终止,

$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

I am also try with this code, 我也尝试使用此代码,

<?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; 

?>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM