function getMonthDaysAccordingly(&$event, $month, $year) { $byDayArray = $event->getByDay(); $byMonthDays = $event->getByMonthDay(); $resultDays = array(); if (count($byDayArray) == 0) { $resultDays = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31); return $resultDays; } for ($i = 0; $i < count($byDayArray); $i++) { if (preg_match('/([-\\+]{0,1})?([0-9]{1})?([A-Z]{2})/', $byDayArray[$i], $byDaySplit)) { $dayOfWeekday = \TYPO3\CMS\Cal\Controller\Calendar::two2threeCharDays($byDaySplit[3], false); $monthStartTime = new \TYPO3\CMS\Cal\Model\CalDate($year . '-' . sprintf("%02d", $month) . '-01 00:00:00'); $monthStartTime->setTZbyId('UTC'); $monthEndTime = \TYPO3\CMS\Cal\Controller\Calendar::calculateEndMonthTime($monthStartTime); if ($byDaySplit[2] > 0) { if ($byDaySplit[1] == '-') { $monthTime = new \TYPO3\CMS\Cal\Model\CalDate(Calc::prevDayOfWeek($dayOfWeekday, $monthEndTime->getDay(), $monthEndTime->getMonth(), $monthEndTime->getYear(), '%Y%m%d', true)); $monthTime->setTZbyId('UTC'); $monthTime->subtractSeconds(($byDaySplit[2] - 1) * 604800); } else { $monthTime = new \TYPO3\CMS\Cal\Model\CalDate(Calc::nextDayOfWeek($dayOfWeekday, $monthStartTime->getDay(), $monthStartTime->getMonth(), $monthStartTime->getYear(), '%Y%m%d', true)); $monthTime->setTZbyId('UTC'); $monthTime->addSeconds(($byDaySplit[2] - 1) * 604800); } if ($monthTime->getMonth() == $month && in_array($monthTime->getDay(), $byMonthDays)) { $resultDays[] = $monthTime->getDay(); } } else { $monthTime = new \TYPO3\CMS\Cal\Model\CalDate(Calc::prevDayOfWeek($dayOfWeekday, $monthStartTime->getDay(), $monthStartTime->getMonth(), $monthStartTime->getYear(), '%Y%m%d', true)); $monthTime->setTZbyId('UTC'); if ($monthTime->before($monthStartTime)) { $monthTime->addSeconds(604800); } while ($monthTime->before($monthEndTime)) { $resultDays[] = $monthTime->getDay(); $monthTime->addSeconds(604800); } } } } $resultDays = array_intersect($resultDays, $event->getByMonthDay()); sort($resultDays); return $resultDays; }