- Calculating difference between two dates with DateTime class
- Calculatng manually the difference between two dates
- Finding leap year
Calculating difference between two dates with DateTime class
Sometimes you need to calculate the difference between two dates, you can use the diff()
method of DateTime
class to perform the task:
Example: Object-oriented way to find difference between two dates
<?php $a = new DateTime('9th Jun 2017 3:59:08AM'); $b = new DateTime('11th August 2022 07:42:09PM'); $o = $a->diff($b); echo $o->y.' years, '.$o->m.' months, '.$o->d. 'days, '.$o->h.' hours, ' .$o->i.' minutes, and'. $o->s .' seconds. Total days: '. $o->days;
The DateTime::diff() method returns DateInterval object that can be formatted with DateInterval::format() method.
Example: Procedural way to calculate the difference between two dates
<?php $a = date_create('9th Jun 2017 3:59:08AM'); $b = date_create('11th August 2022 07:42:09PM'); $o = date_diff($a, $b); echo $o->y.' years, '.$o->m.' months, '.$o->d. 'days, '.$o->h.' hours, ' .$o->i.' minutes, and'. $o->s .' seconds. Total days: '. $o->days;
Both examples print the following output on web browsers:
# 5 years, 2 months, 2days, 15 hours, 43 minutes, and1 seconds. Total days: 1889
Manually calculating the difference between two dates
The epoche value (Unix timestamp) can be used to easily calculate the difference between two dates. The trick is to convert the dates into timestamps, then the difference between these two timestamps is calculated. The result is the time difference in seconds.
<?php $prevDate = strtotime('Dec, 1 1998 12:00PM'); $nextDate = mktime(12, 0, 0, 1, 1, 2022);; $diference = $nextDate - $prevDate;
This value can then be used to find out how many minutes, hours, and days this corresponds to:
- 1 minute = 60 seconds
- 1 hour = 60 minutes = 60 x 60 = 3600 seconds
- 1 day = 24 hours = 24 x 60 x 60 = 86400 seconds
Example: Calculating the Difference Between Two Dates
In this example, we used the strtotime()
function, you can use a different function for generating the timestamp. We just round down each result and subtract it from the result to split up the difference into days, hours, and minutes.
<?php $prevDate = '9th Aug 2022 06:41:08AM'; $nextDate = '11th August 2022 07:42:09PM'; # Difference between two days in seconds $difference = strtotime($nextDate) - strtotime($prevDate); # Convert seconds into days $days = floor($difference / 84600); # Subtract days (in seconds) from the $difference $difference -= 84600 * floor($difference / 84600); # Convert remaining seconds into hours $hours = floor($difference / 3600); # Subtract hours $difference -= 3600 * floor($difference / 3600); # Convert remaining seconds into minutes $minutes = floor($difference / 60); # Subtract minutes, the remaining difference will be seconds $difference -= 60 * floor($difference / 60); echo "Difference between $prevDate and $nextDate is:<br>". "days: $days, hours: $hours, seconds: $difference"; /* Difference between 9th Aug 2022 06:41:08AM and 11th August 2022 07:42:09PM is: days: 2, hours: 14, seconds: 1 */
Finding leap year
If a year is divisible by 4 and is either not divisible by 100 or is divisible by 400, it is a leap year and February has 29 days (this is because the Earth needs approximately 365.25 days to revolve around the sun). If you want to determine whether a given year is a leap year, this function comes in handy:
<?php function isLeapYear($year) { return ($year % 4 == 0 && ($year % 100 != 0 || $year % 400 == 0)); } $years = range (2020, 2040); foreach ($years as $year){ if (isLeapYear($year)) echo $year . ' '; } # Prints: 2020 2024 2028 2032 2036 2040
The Date and Time Tutorials:
- PHP DateTime Class
- PHP DateTimeZone Class – times in different countries
- PHP DateInterval Class – adds or subtracts dates/times
- PHP DatePeriod Class – generates date or time ranges
- PHP Validating Age and Date of Birth
- Sunset, Sunrise, Transit, and Twilight
- Localizing Dates
- Localizing Dates with IntlDateFormatter Class