• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/util/replicator/task/fromtemplate.php
  • Класс: BitrixTasksUtilReplicatorTaskFromTemplate
  • Вызов: FromTemplate::getWeeklyDate
static function getWeeklyDate($baseTime, $arParams, $preferredTime)
{
	$weekNumber = intval($arParams["EVERY_WEEK"]);
	$currentDay = date("N", $baseTime); // day 1 - 7
	$days = is_array($arParams["WEEK_DAYS"]) && sizeof(array_filter($arParams["WEEK_DAYS"])) ? $arParams["WEEK_DAYS"] : array(1); // days 1 - 7

	$preferredDateTime = static::stripTime($baseTime) + $preferredTime;
	$date = $preferredDateTime;

	// check if we need to create task today
	if (in_array($currentDay, $days))
	{
		if ($date > $baseTime)
		{
			return $date;
		}
	}

	// check if we have "chosen day" ahead, till the end of the week
	$nextDay = false;
	for ($i = $currentDay + 1; $i <= 7; $i++)
	{
		if(in_array($i, $days))
		{
			$nextDay = $i;
			break;
		}
	}

	if ($nextDay)
	{
		// next available day found, so just move there
		$date = $preferredDateTime + ($nextDay - $currentDay) * 86400;
	}
	else
	{
		// we are at the end of the week, and there are no chosen days to pick
		// so we skip $weekNumber weeks and add the first available day
		reset($days);
		$firstDay = current($days);
		$restOfWeek = 7 - $currentDay;

		$date = $preferredDateTime + ($weekNumber > 1? ($weekNumber - 1) : 0) * 7 * 86400 + ($restOfWeek + $firstDay) * 86400;
	}

	return $date;
}