Vendor/phpspreadsheet/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTime.php
public static function EDATE($dateValue = 1, $adjustmentMonths = 0)
    {
        $dateValue = Functions::flattenSingleValue($dateValue);
        $adjustmentMonths = Functions::flattenSingleValue($adjustmentMonths);

        if (!is_numeric($adjustmentMonths)) {
            return Functions::VALUE();
        }
        $adjustmentMonths = floor($adjustmentMonths);

        if (is_string($dateValue = self::getDateValue($dateValue))) {
            return Functions::VALUE();
        }

        // Execute function
        $PHPDateObject = self::adjustDateByMonths($dateValue, $adjustmentMonths);

        switch (Functions::getReturnDateType()) {
            case Functions::RETURNDATE_EXCEL:
                return (float) Date::PHPToExcel($PHPDateObject);
            case Functions::RETURNDATE_PHP_NUMERIC:
                return (int) Date::excelToTimestamp(Date::PHPToExcel($PHPDateObject));
            case Functions::RETURNDATE_PHP_OBJECT:
                return $PHPDateObject;
        }
    }
public static function EDATE($dateValue = 1, $adjustmentMonths = 0)
    {
        $dateValue = Functions::flattenSingleValue($dateValue);
        $adjustmentMonths = Functions::flattenSingleValue($adjustmentMonths);

        if (!is_numeric($adjustmentMonths)) {
            return Functions::VALUE();
        }
        $adjustmentMonths = floor($adjustmentMonths);

        if (is_string($dateValue = self::getDateValue($dateValue))) {
            return Functions::VALUE();
        }

        // Execute function
        $PHPDateObject = self::adjustDateByMonths($dateValue, $adjustmentMonths);

        switch (Functions::getReturnDateType()) {
            case Functions::RETURNDATE_EXCEL:
                return (float) Date::PHPToExcel($PHPDateObject);
            case Functions::RETURNDATE_PHP_NUMERIC:
                return (int) Date::excelToTimestamp(Date::PHPToExcel($PHPDateObject));
            case Functions::RETURNDATE_PHP_OBJECT:
                return $PHPDateObject;
        }
    }
public static function EDATE ( $ dateValue = 1 , $ adjustmentMonths = 0 ) { $ dateValue = Functions :: flattenSingleValue ( $ dateValue ) ; $ adjustmentMonths = Functions :: flattenSingleValue ( $ adjustmentMonths ) ; if ( ! is_numeric ( $ adjustmentMonths ) ) { return Functions :: VALUE ( ) ; } $ adjustmentMonths = floor ( $ adjustmentMonths ) ; if ( is_string ( $ dateValue = self :: getDateValue ( $ dateValue ) ) ) { return Functions :: VALUE ( ) ; } // Execute function $ PHPDateObject = self :: adjustDateByMonths ( $ dateValue , $ adjustmentMonths ) ; switch ( Functions :: getReturnDateType ( ) ) { case Functions :: RETURNDATE_EXCEL : return ( float ) Date :: PHPToExcel ( $ PHPDateObject ) ; case Functions :: RETURNDATE_PHP_NUMERIC : return ( int ) Date :: excelToTimestamp ( Date :: PHPToExcel ( $ PHPDateObject ) ) ; case Functions :: RETURNDATE_PHP_OBJECT : return $ PHPDateObject ; } }
EDATE.

Returns the serial number that represents the date that is the indicated number of months
before or after a specified date (the start_date).
Use EDATE to calculate maturity dates or due dates that fall on the same day of the month
as the date of issue.

Excel Function:
EDATE(dateValue,adjustmentMonths)

@param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer),
PHP DateTime object, or a standard date string
@param int $adjustmentMonths The number of months before or after start_date.
A positive value for months yields a future date;
a negative value yields a past date.

@return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object,
depending on the value of the ReturnDateType flag
EDATE .