• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/scrum/service/sprintservice.php
  • Класс: BitrixTasksScrumServiceSprintService
  • Вызов: SprintService::getSprintRanges
public function getSprintRanges(EntityForm $sprint, UtilCalendar $calendar): SprintRanges
{
	$info = [
		'all' => [],
		'weekdays' => [],
		'weekendInfo' => [],
		'currentWeekDay' => 0,
	];

	$start = (new DateTime())->setTimestamp($sprint->getDateStart()->getTimestamp());
	$end = (new DateTime())->setTimestamp($sprint->getDateEnd()->getTimestamp());

	$currentDateTime = new Datetime();

	$period = new DatePeriod($start, new DateInterval('P1D'), $end);
	$weekDayNumber = 0;
	foreach ($period as $key => $value)
	{
		$dayNumber = $key + 1;
		$value->add(new DateInterval('PT9H'));
		if ($calendar->isWeekend(UtilTypeDateTime::createFromTimestamp($value->getTimestamp())))
		{
			$info['weekendInfo'][$dayNumber] = [
				'weekendNumber' => $dayNumber,
				'previousWeekday' => ($weekDayNumber ? $weekDayNumber : 1)
			];
		}
		else
		{
			$weekDayNumber = $dayNumber;
			$info['weekdays'][$dayNumber] = $value->getTimestamp();

			$weekDayRange = [
				'start' => strtotime('today', $value->getTimestamp()),
				'end' => strtotime('tomorrow', $value->getTimestamp()) - 1,
			];
			$currentDayRange = [
				'start' => strtotime('today', $currentDateTime->getTimestamp()),
				'end' => strtotime('tomorrow', $currentDateTime->getTimestamp()) - 1,
			];
			if ($this->isTimeOverlapping($weekDayRange, $currentDayRange))
			{
				$info['currentWeekDay'] = $dayNumber;
			}
		}
		$info['all'][$dayNumber] = $value->getTimestamp();
	}

	$sprintRanges = new SprintRanges();

	$sprintRanges->setAllDays($info['all']);
	$sprintRanges->setWeekdays($info['weekdays']);
	$sprintRanges->setWeekendInfo($info['weekendInfo']);
	$sprintRanges->setCurrentWeekDay($info['currentWeekDay']);

	return $sprintRanges;
}