Repetição de eventos no “enésimo” dia da semana de cada mês

Eu olhei pelo menos duas dúzias de tópicos sobre isso e ainda não encontrei uma boa resposta, por isso, solicito mais uma vez respostas sobre o temido tópico de Eventos Repetitivos.

Eu tenho repetições diárias, semanais, mensais e anuais funcionando bem por enquanto (ainda preciso renovar o sistema com eventos de exceção e outros enfeites, mas funciona por enquanto). Porém, queremos poder adicionar a capacidade de repetir eventos no (1º, 2º, 3º, 4º e 5º) [Dom | Seg | Ter | Qua | Qui | Sex | Sáb] de cada mês, a cada dois meses, e a cada três meses.

gora, se eu puder entender a lógica de todos os meses, posso descobrir todos os meses e a cada três mese

Aqui está um pouco do que tenho até agora (observação: não estou dizendo que tenho a melhor maneira de fazer isso ou algo assim, mas o sistema é um que atualizamos muito lentamente ao longo do tempo, quando não estamos ocupados com outros projetos, para tornar o código mais eficiente, pois tenho tempo).

Primeiro, recebo as datas inicial e final formatadas para cálculos de datas:

$ending = $_POST['end_month'] . "/" . $_POST['end_day'] . "/" . substr($_POST['end_year'], 2, 2);
$starting = $_POST['month'] . "/" . $_POST['day'] . "/" . substr($_POST['year'], 2, 2);

Então entendo a diferença entre os dois para saber quantas vezes repetir usando uma função, tenho certeza de que encontrei aqui há algum tempo e divido esse valor por 28 dias para obter quantas vezes é necessário repetir. que existe um por mês:

$repeat_number = date_diff($starting, $ending) / 28;
//find the difference in DAYS between the two dates
function date_diff($old_date, $new_date) {
$offset = strtotime($new_date) - strtotime($old_date);
return $offset/60/60/24;
}

Então eu adiciono a parte (1º, 2º, etc ...) à parte [Dom | Seg | etc ...] para descobrir o que eles estão procurando, fornecendo-me algo como 'primeiro domingo':

$find = $_POST['custom_number']. ' ' . $_POST['custom_day'];

Então eu uso um loop que executa o número de vezes que isso precisa ser repetido (o $ repeat_number acima):

for($m = 0; $m <= $repeat_number; $m++) {
if($m == 0) {
     $month = date('F', substr($starting,0,2));
} else {
     $month = date('F', strtotime($month . ' + ' . $m . ' months'));
}
$repeat_date = strtotime($find . ' in ' . $month);
}

Agora, eu sei que esse código não funciona, eu já tinha um código que apareceu no mês e ano corretos para a repetição, mas não necessariamente encontrava a primeira terça-feira ou o que quer que estivesse sendo procurado para

Se alguém pudesse me apontar de volta na direção certa, seria muito apreciado. Estou à espreita na comunidade há algum tempo, apenas comecei a tentar participar ativamente recentemente.

Agradecemos antecipadamente por qualquer contribuição ou conselho que você possa fornece

questionAnswers(3)

yourAnswerToTheQuestion