The DateInterval class is used to represent a duration or interval between two dates. It allows you to work with dates in a more granular and flexible way. The DateInterval class is part of PHP's DateTime extension, which provides powerful date and time manipulation capabilities.

 

Interval Format

The DateInterval constructor takes a string parameter that specifies the duration using a specific format. The format consists of several parts:

P: Represents the period or duration. It is always required and must come at the beginning of the format string.
Y: Represents years.
M: Represents months.
D: Represents days.
W: Represents weeks. If used, it should be combined with the number of days (e.g., 1W2D represents 1 week and 2 days).
H: Represents hours.
M: Represents minutes.
S: Represents seconds.


Each component is followed by a number that represents the quantity or value of that component. For example, P2D represents a duration of 2 days, P1W represents 1 week, and P3M2D represents 3 months and 2 days.

 

Examples of working with date intervals in PHP

Creating a Date Interval

$interval = new DateInterval('P2D'); // Represents a duration of 2 days

Adding an Interval to a Date

$date = new DateTime('2023-07-01');
$interval = new DateInterval('P1W'); // Represents a duration of 1 week
$date->add($interval);
echo $date->format('Y-m-d'); // Output: 2023-07-08

 

Subtracting an Interval from a Date

$date = new DateTime('2023-07-15');
$interval = new DateInterval('P2M'); // Represents a duration of 2 months
$date->sub($interval);
echo $date->format('Y-m-d'); // Output: 2023-05-15

 

Calculating the Difference Between Two Dates

$date1 = new DateTime('2023-07-01');
$date2 = new DateTime('2023-07-10');
$interval = $date1->diff($date2);
echo $interval->format('%R%a days'); // Output: +9 days

 

Iterating Over Date Intervals

$startDate = new DateTime('2023-07-01');
$endDate = new DateTime('2023-07-10');
$interval = new DateInterval('P1D'); // Represents a duration of 1 day

$period = new DatePeriod($startDate, $interval, $endDate);
foreach ($period as $date) {
    echo $date->format('Y-m-d') . "\n";
}
/* Output:
   2023-07-01
   2023-07-02
   2023-07-03
   2023-07-04
   2023-07-05
   2023-07-06
   2023-07-07
   2023-07-08
   2023-07-09
   2023-07-10
*/

 

This DateInterval class available in PHP is very useful and helps you dealing in a very easy way, with the complexities of doing date calculations

For more information go to PHP Documentation: DateInterval