Après relecture de ma logique je me suis dis mais c'est pas exactement ce que j'ai fait, pourquoi faire simple quand on peut faire compliqué ? Alors voilà la fonction simplifiée et qui suit véritablement la logique énoncée.
function getDayAssaults(string $dayDate = '2024-02-22'): array
{
$referenceTime = (new DateTime('2024-02-21T18:00'))->getTimestamp();
$assaultDelayTime = 19 * 60 * 60;
$startRatio = (
(new DateTime($dayDate . 'T00:00'))->getTimestamp() - $referenceTime
) / $assaultDelayTime;
$endRatio = (
(new DateTime($dayDate . 'T23:59'))->getTimestamp() - $referenceTime
) / $assaultDelayTime;
$dayAssaults = [];
for (
$i = is_int($startRatio) ? $startRatio : ceil($startRatio);
$i <= floor($endRatio);
$i++
) {
$dayAssaults[] = (new DateTime())->setTimestamp($i * $assaultDelayTime + $referenceTime);
}
return $dayAssaults;
}
Au final on boucle sur chaque entier compris entre les ratios de début et fin de journée et on a qu'à calculer le timestamp correspondant à l'entier en le multipliant par le nombres de secondes dans 19h et en y ajoutant le timestamp de la date de référence.