• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/util/replicator/task/fromtemplate.php
  • Класс: BitrixTasksUtilReplicatorTaskFromTemplate
  • Вызов: FromTemplate::addMonths
static function addMonths(DateTime $date, $months)
{
	$years = floor(abs($months / 12));
	$leap = ($date->format('d') >= 29);
	$m = 12 * ($months >= 0? 1 : -1);

	for ($a = 1; $a < $years; $a++)
	{
		$date = static::addMonths($date, $m);
	}
	$months -= ($a - 1) * $m;

	$resultDate = clone $date;
	if ($months != 0)
	{
		$modifier = $months.' months';
		$date->modify($modifier);

		if ($date->format('m') % 12 != (12 + $months + $resultDate->format('m')) % 12)
		{
			$day = $date->format('d');
			$resultDate->modify("-{$day} days");
		}
		$resultDate->modify($modifier);
	}

	$y = $resultDate->format('Y');
	if ($leap && ($y % 4) == 0 && ($y % 100) != 0 && $resultDate->format('d') == 28)
	{
		$resultDate->modify('+1 day');
	}

	return $resultDate;
}