What are the best practices for accurately calculating end dates in PHP based on specified durations?

When calculating end dates in PHP based on specified durations, it is important to accurately handle different units of time (e.g. days, weeks, months) and account for leap years and varying month lengths. One approach is to use PHP's DateTime class to perform date calculations in a reliable and consistent manner.

function calculateEndDate($startDate, $duration, $unit) {
    $date = new DateTime($startDate);
    
    switch ($unit) {
        case 'days':
            $date->modify('+' . $duration . ' days');
            break;
        case 'weeks':
            $date->modify('+' . $duration . ' weeks');
            break;
        case 'months':
            $date->modify('+' . $duration . ' months');
            break;
        default:
            return false;
    }
    
    return $date->format('Y-m-d');
}

// Example of calculating end date based on 3 weeks duration
$startDate = '2022-01-01';
$duration = 3;
$unit = 'weeks';
$endDate = calculateEndDate($startDate, $duration, $unit);

echo $endDate; // Output: 2022-01-22