I recently needed to calculate age in months ranging from prenatal to 5 years old [60+ months].
Neither of the answers above worked for me. The first one I tried, which is basically a 1 liner for deceze's answer
$bdate = strtotime['2011-11-04'];
$edate = strtotime['2011-12-03'];
$age = [[date['Y',$edate] - date['Y',$bdate]] * 12] + [date['m',$edate] - date['m',$bdate]];
. . .
This fails with the set dates, obviously the answer should be 0 as the month mark [2011-12-04] hasn't been reached yet, how ever the code returns 1.
The second method I tried, using Adam's code
$bdate = strtotime['2011-01-03'];
$edate = strtotime['2011-02-03'];
$age = 0;
while [strtotime['+1 MONTH', $bdate] < $edate] {
$age++;
$bdate = strtotime['+1 MONTH', $bdate];
}
. . .
This fails and says 0 months, when it should be 1.
What did work for me, is a little expansion of this code. What I used is the following:
$bdate = strtotime['2011-11-04'];
$edate = strtotime['2012-01-04'];
$age = 0;
if[$edate < $bdate] {
//prenatal
$age = -1;
} else {
//born, count months.
while[$bdate < $edate] {
$age++;
$bdate = strtotime['+1 MONTH', $bdate];
if [$bdate > $edate] {
$age--;
}
}
}
When you calculate the difference between two PHP DateTime
objects, it returns a DateInterval
object. From this DateInterval
object, you can access the year and month to calculate the total months between two dates like so:
$start = new DateTime['2020-01-01 00:00:00']; $end = new DateTime['2021-03-15 00:00:00']; $diff = $start->diff[$end]; $yearsInMonths = $diff->format['%r%y'] * 12; $months = $diff->format['%r%m']; $totalMonths = $yearsInMonths + $months; echo $totalMonths; // 14
Using the DateInterval::format[]
method with %y
and %m
format specifiers, you get the year and month respectively. The %r
format specifier, simply adds the "-
" sign when the
difference is negative. To test this you switch the $end
and $start
dates to see a negative time period:
$start = new DateTime['2020-01-01 00:00:00']; $end = new DateTime['2021-03-15 00:00:00']; $diff = $end->diff[$start]; $yearsInMonths = $diff->format['%r%y'] * 12; $months = $diff->format['%r%m']; $totalMonths = $yearsInMonths + $months; echo $totalMonths; // -14
If you do not wish to include the negative sign for negative time periods, you can do either of the following:
- Simply remove the
%r
format specifier when retrieving the year and month, or; - Pass
true
as the second argument to theDateTime::diff[]
method to always return an absolute / positive interval.
Instead of using the DateInterval::format[]
method, you can also directly access the year and month values using the y
and m
properties on the DateInterval
object. Similarly, to check for a negative time period, you can access the invert
property [which equals 1
if the interval represents a negative time period and 0
otherwise].
Hope you found this post useful. It was published 02 Aug, 2021. Please show your love and support by sharing this post.
In this article, we will see how to calculate the difference between 2 dates in PHP, along with understanding its implementation through the examples. Given two dates ie., start_date and end_date & we need to find the difference between the two dates.
Consider the below example:
Input: start_date: 2016-06-01 22:45:00 end_date: 2018-09-21 10:44:01 Output: 2 years, 3 months, 21 days, 11 hours, 59 minutes, 1 seconds Explanation: The difference of 2 dates will give the date in complete format.
Method 1: Using date_diff[] Function
This function is used to find the difference between two dates. This function will return a DateInterval object on the success and returns FALSE on failure.
Example: This example illustrates the use of the date_diff[] function to calculate the difference between the 2 dates.
PHP
Output:
+2 years 3 months
Method 2: To use the date-time mathematical formula to find the difference between two dates. It returns the years, months, days, hours, minutes, seconds between two specified dates.
Example: In this example, we will be using the date-time mathematical formula to calculate the difference between the dates that will be returned in years, months, days, hours, minutes, seconds.
PHP
Output:
2 years, 3 months, 21 days, 11 hours, 59 minutes, 1 seconds
Method 3: This method is used to get the total number of days between two specified dates.
PHP
Output:
Difference between two dates: 103
PHP is a server-side scripting language designed specifically for web development. You can learn PHP from the ground up by following this PHP Tutorial and PHP Examples.