# tablepress/3.4/libraries/vendor/PhpSpreadsheet/Calculation/DateTimeExcel/Month.php

TablePress – Tables in WordPress made easy, version 3.4. 105 lines.

- Page: https://pluginprobe.com/plugins/tablepress/3.4/code/libraries/vendor/PhpSpreadsheet/Calculation/DateTimeExcel/Month.php
- Raw: https://pluginprobe.com/plugins/tablepress/3.4/raw/libraries/vendor/PhpSpreadsheet/Calculation/DateTimeExcel/Month.php
- Modified: 2025-08-26T04:06:14+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/tablepress/3.4/code/libraries/vendor/PhpSpreadsheet/Calculation/DateTimeExcel/Month.php#L10-L20`.

```php
<?php

namespace TablePress\PhpOffice\PhpSpreadsheet\Calculation\DateTimeExcel;

use DateTime;
use TablePress\PhpOffice\PhpSpreadsheet\Calculation\ArrayEnabled;
use TablePress\PhpOffice\PhpSpreadsheet\Calculation\Exception;

class Month
{
	use ArrayEnabled;

	/**
	 * 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
	 *                         Or can be an array of date values
	 * @param array<mixed>|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.
	 *                         Or can be an array of adjustment values
	 *
	 * @return array<mixed>|DateTime|float|int|string Excel date/time serial value, PHP date/time serial value or PHP date/time object,
	 *                        depending on the value of the ReturnDateType flag
	 *         If an array of values is passed as the argument, then the returned result will also be an array
	 *            with the same dimensions
	 */
	public static function adjust($dateValue, $adjustmentMonths)
	{
		if (is_array($dateValue) || is_array($adjustmentMonths)) {
			return self::evaluateArrayArguments([self::class, __FUNCTION__], $dateValue, $adjustmentMonths);
		}

		try {
			$dateValue = Helpers::getDateValue($dateValue, false);
			$adjustmentMonths = Helpers::validateNumericNull($adjustmentMonths);
		} catch (Exception $e) {
			return $e->getMessage();
		}
		$dateValue = floor($dateValue);
		$adjustmentMonths = floor($adjustmentMonths);

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

		return Helpers::returnIn3FormatsObject($PHPDateObject);
	}

	/**
	 * EOMONTH.
	 *
	 * Returns the date value for the last day of the month that is the indicated number of months
	 * before or after start_date.
	 * Use EOMONTH to calculate maturity dates or due dates that fall on the last day of the month.
	 *
	 * Excel Function:
	 *        EOMONTH(dateValue,adjustmentMonths)
	 *
	 * @param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer),
	 *                                        PHP DateTime object, or a standard date string
	 *                         Or can be an array of date values
	 * @param array<mixed>|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.
	 *                         Or can be an array of adjustment values
	 *
	 * @return array<mixed>|DateTime|float|int|string Excel date/time serial value, PHP date/time serial value or PHP date/time object,
	 *                        depending on the value of the ReturnDateType flag
	 *         If an array of values is passed as the argument, then the returned result will also be an array
	 *            with the same dimensions
	 */
	public static function lastDay($dateValue, $adjustmentMonths)
	{
		if (is_array($dateValue) || is_array($adjustmentMonths)) {
			return self::evaluateArrayArguments([self::class, __FUNCTION__], $dateValue, $adjustmentMonths);
		}

		try {
			$dateValue = Helpers::getDateValue($dateValue, false);
			$adjustmentMonths = Helpers::validateNumericNull($adjustmentMonths);
		} catch (Exception $e) {
			return $e->getMessage();
		}
		$dateValue = floor($dateValue);
		$adjustmentMonths = floor($adjustmentMonths);

		// Execute function
		$PHPDateObject = Helpers::adjustDateByMonths($dateValue, $adjustmentMonths + 1);
		$adjustDays = (int) $PHPDateObject->format('d');
		$adjustDaysString = '-' . $adjustDays . ' days';
		$PHPDateObject->modify($adjustDaysString);

		return Helpers::returnIn3FormatsObject($PHPDateObject);
	}
}

```
