<?php
function get_ciclo($dia_inicial=21, $dia_final=20, $data_referencia) {
$mes = date('m', $data_referencia) - 1; // começa no mês anterior $ano = date('Y', $data_referencia); if (date("d", $data_referencia) < $dia_inicial) { $mes--; // // nesse caso, volta mais um mês
}
date("Y-m-d", mktime(0, 0, 0, $mes, $dia_inicial, $ano)), date("Y-m-d", mktime(0, 0, 0, $mes + 1, $dia_final, $ano)) );
}
$dia_inicial = 21;
$dia_final = 20;
$mes = 10;
$ano = 2021;
while (true) {
// gera o ciclo do mês atual
print_r(get_ciclo
($dia_inicial, $dia_final, mktime(0, 0, 0, $mes, $dia_inicial, $ano)));
// avança um mês
$data = mktime(0, 0, 0, $mes + 1, $dia_inicial, $ano); if ($ano == 2022 && $mes == 10) // 09/2022 é o último mês, se chegou em 10/2022, encerra
break;
}
PD9waHAKZnVuY3Rpb24gZ2V0X2NpY2xvKCRkaWFfaW5pY2lhbD0yMSwgJGRpYV9maW5hbD0yMCwgJGRhdGFfcmVmZXJlbmNpYSkgewogICAgJG1lcyA9IGRhdGUoJ20nLCAkZGF0YV9yZWZlcmVuY2lhKSAtIDE7IC8vIGNvbWXDp2Egbm8gbcOqcyBhbnRlcmlvcgogICAgJGFubyA9IGRhdGUoJ1knLCAkZGF0YV9yZWZlcmVuY2lhKTsKICAgIGlmIChkYXRlKCJkIiwgJGRhdGFfcmVmZXJlbmNpYSkgPCAkZGlhX2luaWNpYWwpIHsKICAgICAgICAkbWVzLS07IC8vIC8vIG5lc3NlIGNhc28sIHZvbHRhIG1haXMgdW0gbcOqcwogICAgfQogICAgcmV0dXJuIGFycmF5KAogICAgICAgIGRhdGUoIlktbS1kIiwgbWt0aW1lKDAsIDAsIDAsICRtZXMsICRkaWFfaW5pY2lhbCwgJGFubykpLAogICAgICAgIGRhdGUoIlktbS1kIiwgbWt0aW1lKDAsIDAsIDAsICRtZXMgKyAxLCAkZGlhX2ZpbmFsLCAkYW5vKSkKICAgICk7Cn0KCiRkaWFfaW5pY2lhbCA9IDIxOwokZGlhX2ZpbmFsID0gMjA7CiRtZXMgPSAxMDsKJGFubyA9IDIwMjE7CndoaWxlICh0cnVlKSB7CiAgICAvLyBnZXJhIG8gY2ljbG8gZG8gbcOqcyBhdHVhbAogICAgcHJpbnRfcihnZXRfY2ljbG8oJGRpYV9pbmljaWFsLCAkZGlhX2ZpbmFsLCBta3RpbWUoMCwgMCwgMCwgJG1lcywgJGRpYV9pbmljaWFsLCAkYW5vKSkpOwoKICAgIC8vIGF2YW7Dp2EgdW0gbcOqcwogICAgJGRhdGEgPSBta3RpbWUoMCwgMCwgMCwgJG1lcyArIDEsICRkaWFfaW5pY2lhbCwgJGFubyk7CiAgICAkbWVzID0gZGF0ZSgnbScsICRkYXRhKTsKICAgICRhbm8gPSBkYXRlKCdZJywgJGRhdGEpOwogICAgaWYgKCRhbm8gPT0gMjAyMiAmJiAkbWVzID09IDEwKSAvLyAwOS8yMDIyIMOpIG8gw7psdGltbyBtw6pzLCBzZSBjaGVnb3UgZW0gMTAvMjAyMiwgZW5jZXJyYQogICAgICAgIGJyZWFrOwp9Cg==