Skip to content

date_sub()

DateTime::sub() in PHP

PHP's DateTime and DateInterval classes provide a robust, object-oriented approach to date calculations, replacing the legacy date_sub() function (removed in PHP 8.0). The DateTime::sub() method allows you to subtract time intervals accurately and predictably.

Advanced Date Calculations in PHP

Step 1: Understanding the Basics of Date Calculations in PHP

The DateTime::sub() method modifies a DateTime object in place and returns the updated instance. To use it, you need a DateTime object and a DateInterval object that defines the duration to subtract.

The method signature is DateTime::sub(DateInterval $interval): DateTime. It modifies the DateTime object in place and returns the updated instance.

php
$date = new DateTime('2023-10-15', new DateTimeZone('UTC'));
$interval = new DateInterval('P5D'); // 5 days
$date->sub($interval);
echo $date->format('Y-m-d'); // Outputs: 2023-10-10

Step 2: Adding Custom Parameters to Date Calculations

You can customize the DateInterval to subtract years, months, weeks, hours, minutes, or seconds. The ISO 8601 duration format (P[n]Y[n]M[n]DT[n]H[n]M[n]S) is used to define these intervals.

php
$date = new DateTime('2023-10-15 12:00:00');
$interval = new DateInterval('P2M1DT3H'); // 2 months, 1 day, 3 hours
$date->sub($interval);
echo $date->format('Y-m-d H:i:s'); // Outputs: 2023-08-14 09:00:00

Note: DateInterval validates the duration string strictly. Passing an invalid format will throw an Exception. Always wrap interval creation in a try...catch block if the input is dynamic.

Step 3: Leveraging External Libraries for More Complex Date Calculations

For advanced scenarios like handling timezones, calendar quirks, or complex business logic, libraries like Carbon provide additional fluent methods. However, for most standard use cases, PHP's native DateTime and DateInterval classes are sufficient and recommended.

php
// Example using Carbon (external library)
use Carbon\Carbon;

$date = Carbon::parse('2023-10-15');
$newDate = $date->subMonths(2)->subDays(5);
echo $newDate->toDateString(); // Outputs: 2023-08-10

Conclusion

By following these steps, you can perform accurate date calculations in PHP using modern object-oriented practices.

Practice

What does the PHP DateSub() function do?

Dual-run preview — compare with live Symfony routes.