Date Difference in PHP: From Beginner to Pro

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

How to Calculate the Difference Between Two Dates in PHP: A Complete Guide with Examples

\n\n

Have you ever faced a task like: "how many days have passed since the user registered?", "what is a person's age based on their date of birth?", or "how many hours until the promotion ends?"? If so, you've definitely wondered: how to calculate the difference between two dates in PHP? This is one of the most popular questions on Stack Overflow, and for good reason: working with dates is a fundamental but tricky topic.

\n\n

In this article, we'll break down three main approaches: the classic strtotime(), the modern object-oriented DateTime, and the powerful third-party package Carbon. You'll learn not only "how to do it" but also which method to choose for your task. Let's go!

\n\n

Why Simple Date Subtraction is a Bad Idea

\n\n

Beginner developers often try to do this:

\n\n
<?php\n$date1 = '2024-01-15';\n$date2 = '2024-01-10';\n$diff = $date2 - $date1; // Error! Strings cannot be subtracted\n?>\n
\n\n

PHP cannot subtract strings, even if they look like dates. The result will be 0 or a warning. Even if you use strtotime() and get Unix timestamps, simple subtraction of seconds will only give you the number of seconds, not a convenient format like "2 days 3 hours 15 minutes". Special tools are needed for that.

\n\n

Approach 1: The Classic — strtotime() and Manual Calculations

\n\n

This method is familiar to anyone who started with PHP 4 or 5. The strtotime() function converts a textual date representation into a Unix timestamp (the number of seconds since January 1, 1970). Then we subtract the timestamps and divide by the number of seconds in a day.

\n\n

Example: Difference in Days

\n\n
<?php\n$date1 = strtotime('2024-12-25');\n$date2 = strtotime('2024-12-20');\n\n$seconds_diff = $date1 - $date2;\n$days_diff = floor($seconds_diff / (60 * 60 * 24));\n\necho "Difference: $days_diff days"; // Outputs: Difference: 5 days\n?>\n
\n\n

Pros: simplicity, no objects required, works fast.

\n\n

Cons:
\n- No timezone support (always UTC).
\n- Possible 1-hour error during daylight saving time transitions (and therefore a 1-day error if the transition boundary falls within your interval).
\n- To get the difference in months or years, you need to write complex logic accounting for leap years.

\n\n

When to use: Only for rough calculations (e.g., "has more than 30 days passed?") or if you have a legacy codebase.

\n\n

Approach 2: DateTime and DateInterval — The Modern PHP Standard

\n\n

Starting with PHP 5.2, the language introduced the powerful DateTime class. Paired with DateInterval, it solves 95% of date-related tasks. This is the recommended way to calculate the difference between two dates in PHP.

\n\n

Basic Example: Difference in Days, Months, and Years

\n\n
<?php\n$date1 = new DateTime('2024-01-15');\n$date2 = new DateTime('2023-11-10');\n$interval = $date1->diff($date2);\n\necho $interval->format('%y years, %m months, %d days');\n// Outputs: 0 years, 2 months, 5 days\n?>\n
\n\n

The magic is that diff() automatically accounts for leap years, varying days in months, and even timezones (if set).

\n\n

Accessing Individual Components

\n\n
<?php\n$date1 = new DateTime('2024-12-25');\n$date2 = new DateTime('2024-01-01');\n$interval = $date1->diff($date2);\n\necho "Years: " . $interval->y . "<br>";\necho "Months: " . $interval->m . "<br>";\necho "Days: " . $interval->d . "<br>";\necho "Total days: " . $interval->days . "<br>";\n// Outputs:\n// Years: 0\n// Months: 11\n// Days: 24\n// Total days: 359\n?>\n
\n\n

Note the days property — it represents the total number of days in the interval (unlike d, which shows

Blogs

Book Recommendations